python:heaps.nsmallest中键的形式

python:heaps.nsmallest中键的形式,python,python-3.x,Python,Python 3.x,当我学习python食谱时,有一个问题让我非常困惑: portfolio = [ {'name': 'IBM', 'shares': 100, 'price': 91.1}, {'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'FB', 'shares': 200, 'price': 21.09}, {'name': 'HPQ', 'shares': 35, 'price':

当我学习python食谱时,有一个问题让我非常困惑:

portfolio = [
       {'name': 'IBM', 'shares': 100, 'price': 91.1},
       {'name': 'AAPL', 'shares': 50, 'price': 543.22},
       {'name': 'FB', 'shares': 200, 'price': 21.09},
       {'name': 'HPQ', 'shares': 35, 'price': 31.75},
       {'name': 'YHOO', 'shares': 45, 'price': 16.35},
       {'name': 'ACME', 'shares': 75, 'price': 115.65}
]

    cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price'])

在这里我们可以看到“s”没有定义,但它如何工作?如果我不想使用lambda,我该怎么办?

事实上,
s
是定义好的,只是不是用你定义事物的方式。请仔细查看此表达式:

key=lambda s: s['price']
如您所见,
s
是在
lambda
之后定义的,在
lambda s:
部分。一个不起作用的表达式是:

key=lambda s: a['price']

如您所见,现在未定义
a
。您只需了解函数
heapq.nsmallest
包含三个参数,最后一个参数是函数(在本例中是lambda函数),在本例中,它包含一个字典并获得一个特定的键。

事实上,
s
是定义的,只是不是以您用来定义事物的方式定义的。请仔细查看此表达式:

key=lambda s: s['price']
如您所见,
s
是在
lambda
之后定义的,在
lambda s:
部分。一个不起作用的表达式是:

key=lambda s: a['price']

如您所见,现在未定义
a
。您只需了解函数
heapq.nsmallest
需要三个参数,最后一个参数是函数(在本例中是lambda函数),在本例中,需要一个字典并获得一个特定的键。

非常感谢!这让我觉得非常感谢你!这是有道理的