問題描述
怎樣在資料字典中執行一些計算操作(比如求最值、排序等)?
解決方案
有如下字典:
stocks = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}
為了對字典值進行計算操作,通常需要使用zip()函式先將字典的鍵和值反轉過來,比如:
# 取出value值最小的鍵值對
min_price = min(zip(stocks.values(), stocks.keys()))
print(min_price)
"""
結果:
(10.75, 'FB')
"""
# 按value值的大小排序
stock_sorted = sorted(zip(stocks.values(), stocks.keys()))
print(stock_sorted)
"""
結果:
[(10.75, 'FB'), (37.2, 'HPQ'), (45.23, 'ACME'), (205.55, 'IBM'), (612.78, 'AAPL')]
"""
執行這些計算的時候,需要注意zip()函式創建的是一個只能訪問一次的迭代器,執行如下的代碼就會產生錯誤:
price_and_name = zip(stocks.values(), stocks.keys())
min_price = min(price_and_name)
print(min_price)
"""
結果:
(10.75, 'FB')
"""
max_price = max(price_and_name)
print(max_price)
"""
結果:
ValueError: max() arg is an empty sequence
"""
討論
如果你在一個字典上執行普通的數學運算,你會發現它們僅僅作用于鍵,而不是值,比如:
min(stocks) # return 'AAPL'
max(stocks) # return 'IBM'
或許你會嘗試使用字典的values()方法:
min(prices.values()) # return 10.75
max(prices.values()) # return 612.78
這也不是你想要的,你還想要知道對應的鍵的資訊,
你可以在 min() 和 max() 函式中提供 key 函式引數來獲取最小值或最大值對應的鍵的資訊,比如:
min(prices, key=lambda k: prices[k]) # return 'FB'
max(prices, key=lambda k: prices[k]) # return 'AAPL'
但是這只回傳了鍵,想要得到value值,還要進行一次查詢:
min_value = https://www.cnblogs.com/L999C/archive/2021/12/22/stocks[min(stocks, key=lambda k: stocks[k])] # return 10.75
max_value = stocks[max(stocks, key=lambda k: stocks[k])] # return 612.78
前面的zip()函式方案通過將字典”反轉”為 (值,鍵) 元組序列來解決了上述問題, 當比較兩個元組的時候,值會先進行比較,然后才是鍵(如果值相同的話,就進行鍵的大小比較), 這樣的話你就能通過一條簡單的陳述句就能很輕松的實作在字典上的求最值和排序操作了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/390255.html
標籤:其他
