我想在这种情况下根据字典键“价格”列出字典列表中最大的两个和最小的两个项目 - 如下代码所示 - 使用 heapq 模块两个函数 nlargest() 和 nsmallest( )我尝试了这段代码,但它没有用:
import heapq
portfolio = [
{'name': 'FACEBOOK', 'shares': 100, 'price': 91.1},
{'name': 'MICROSOFT', 'shares': 50, 'price': 543.22},
{'name': 'APPLE', 'shares': 200, 'price': 21.09},
{'name': 'AMAZON', 'shares': 35, 'price': 31.75}
]
cheap = heapq.nsmallest(2, portfolio)
expensive = heapq.nlargest(2, portfolio)
print('the two cheap stocks:', cheap)
print('the two expensive stocks:', expensive)
然后我找到了一个使用 lambda 的解决方案,它确实有效!但我不明白:这是包含解决方案的版本,它可以工作,但我不明白在这种情况下使用 lambda:
import heapq
portfolio = [
{'name': 'FACEBOOK', 'shares': 100, 'price': 91.1},
{'name': 'MICROSOFT', 'shares': 50, 'price': 543.22},
{'name': 'APPLE', 'shares': 200, 'price': 21.09},
{'name': 'AMAZON', 'shares': 35, 'price': 31.75}
]
# the lambda solution
cheap = heapq.nsmallest(2, portfolio, key=lambda x: x['price'])
expensive = heapq.nlargest(2, portfolio, key=lambda x: x['price'])
print('the two cheap stocks:', cheap)
print('the two expensive stocks:', expensive)
这正是我所期望的输出:
the two cheap stocks: [{'name': 'APPLE', 'shares': 200, 'price': 21.09}, {'name': 'AMAZON', 'shares': 35, 'price': 31.75}]
the two expensive stocks: [{'name': 'MICROSOFT', 'shares': 50, 'price': 543.22}, {'name': 'FACEBOOK', 'shares': 100, 'price': 91.1}]
我希望在函数 nlargest 或 nsmallest 的参数键中找到使用 lambda 的一个很好的解释,并提前致谢。