现有如下字典:
prices = {
'ACME': 45.23,
'IBM': 111.32,
'FB': 45.89
}
求字典的最大最小值,根据value求值
1、通常做法:
prices = {
'ACME': 45.23,
'IBM': 111.32,
'FB': 45.89
}
max(prices, key=lambda k: prices[k])
Out[3]: 'IBM'
min(prices, key=lambda k: prices[k])
Out[4]: 'ACME'
但是这么做,只是返回了字典的键,如需返回对应的value,还需:
prices[max(prices, key=lambda k: prices[k])]
Out[7]: 111.32
2、使用zip(),将字典的键-值对反转为值-键对序列来解决这个问题,这样元组上执行比较操作时,值先比较,再比较键:
max(zip(prices.values(), prices.keys()))
Out[14]: (111.32, 'IBM')
min(zip(prices.values(), prices.keys()))
Out[15]: (45.23, 'ACME')
# 根据value来排序
sorted(zip(prices.values(), prices.keys()))
Out[16]: [(45.23, 'ACME'), (45.89, 'FB'), (111.32, 'IBM')]
注意:
zip()创建了一个迭代器,它的内容只能被消费一次。
a = zip(prices.values(), prices.keys())
max(a)
Out[22]: (111.32, 'IBM')
max(a) # ValueError: max() arg is an empty sequence