zip() --与字典相关的计算-最大、最小值,排序

现有如下字典:

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
    原文作者:cook__
    原文地址: https://www.jianshu.com/p/b7ef810ea000
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞