python-进阶教程-找出字典中值最大(最小)元素的n种方法

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参数的用法,仅供读者参考。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值