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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容