python-進階教程-找出字典中值最大(最小)元素的n種方法
阿新 • • 發佈:2018-12-18
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引數的用法,僅供讀者參考。