0.摘要
字典作为存储“键值对”的数据结构,往往不能直接进行计算,需要借助额外的方法。
本文主要介绍多种方法,实现根据字典的值进行最大值、最小值和排序等计算。
1.使用dict.values()方法
dict.values()方法可以直接提取出字典的值,并存放在单独的字典列表中。
最大值、最小值和排序等计算可以都只要针对该列表进行即可。
prices = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}
print(prices.values())
但是,这通常不是我们所期望的。我们往往希望得到的除了值的信息之外,还想了解该值所关联键的信息。比如,我们想了解股票字典中股价最高的股票,既需要知道股价的最大值,又需要知道这只股票的对应的公司名。
2.zip()方法
如果我们直接对字典进行数据操作,会发现python只会处理键,而不是值。
prices = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}
print(max(prices)) #IBM
print(min(prices)) #AAPL
利用zip()方法,可以实现字典键-值的翻转:
prices = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}
min_price = min(zip(prices.values(), prices.keys()))
max_price = max(zip(prices.values(), prices.keys()))
prices_sorted = sorted(zip(prices.values(), prices.keys()))
#prices_sorted: [(10.75, 'FB'), (37.2, 'HPQ'), (45.23, 'ACME'), (205.55, 'IBM'), (612.78, 'AAPL')]
注意:zip()创建了一个迭代器,但是它的内容只能被使用一次!
详细用法请移步:https://blog.csdn.net/qq_17753903/article/details/82937581
3.使用key参数
prices = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}
# Find min and max price
min_price_key = min(prices, key=lambda k: prices[k]) #股价最低的股票名
max_price_key = max(prices, key=lambda k: prices[k]) #股价最高的股票名
print('min price key:', min_price_key) #FB
print('max price key:', max_price_key) #AAPL
min_price_value = prices[min_price_key] #最低股价
max_price_value = prices[max_price_key] #最高股价
print('min price value:', min_price_value) #10.75
print('max price value:', max_price_value) #612.78
print('sorted prices:')
prices_sorted = sorted(prices, key=lambda k: prices[k])
print(prices_sorted) #按照股价升序排列的股票名
这里key参数lambda表达式中传入的k为prices.keys()。
min,max,sorted方法都有key参数,结合lambda表达式也可以实现相应的基于字典的计算。
但是,这样的方法,如果需要得到最大值、最小值需要进一步查找,这显然比zip方法麻烦一些。
所以,最为推荐的还是zip()方法。key()方法可以用来处理更为复杂情况,灵活地使用lambda表达式可以实现更多操作。
在https://blog.csdn.net/qq_17753903/article/details/84888519中,也介绍了key参数的用法,仅供读者参考。