1. 程式人生 > >python-進階教程-找出字典中值最大(最小)元素的n種方法

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)                                   #按照股價升序排列的股票名

min,max,sorted方法都有key引數,結合lambda表示式也可以實現相應的基於字典的計算。

但是,這樣的方法,如果需要得到最大值、最小值需要進一步查詢,這顯然比zip方法麻煩一些。

所以,最為推薦的還是zip()方法。key()方法可以用來處理更為複雜情況,靈活地使用lambda表示式可以實現更多操作。

https://blog.csdn.net/qq_17753903/article/details/84888519中,也介紹了key引數的用法,僅供讀者參考。