本文實例講述了Python cookbook(數據結構與算法)字典相關計算問題。分享給大家供大家參考,具體如下:
問題:在字典上對數據執行各式各樣的計算(比如求最小值、最大值、排序)。
解決方案:利用zip()將字典的鍵-值對“反轉”為值-鍵對序列。
例如:如下字典存放的股票名稱和對應的價格:
>>> prices = { 'ACME': 45.23, 'AAPL': 612.78, 'IBM': 205.55, 'HPQ': 37.20, 'FB': 10.75}>>> prices{'HPQ': 37.2, 'IBM': 205.55, 'FB': 10.75, 'ACME': 45.23, 'AAPL': 612.78}>>> min_price = min(zip(prices.values(), prices.keys())) #注意zip(x,y)中參數的順序>>> max_price = max(zip(prices.values(), prices.keys()))>>> min_price(10.75, 'FB')>>> max_price(612.78, 'AAPL')>>> 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')]>>> min_price2 = min(zip(prices)) #錯誤用法>>> min_price2('AAPL',)>>> max_price2 = max(zip(prices)) #錯誤用法>>> max_price2('IBM',)>>> min_price3 = min(zip(prices.keys(), prices.values())) #zip()參數順序不對,獲取錯誤的值>>> min_price3('AAPL', 612.78)>>> max_price3 = max(zip(prices.keys(), prices.values())) #zip()參數順序不對,獲取錯誤的值>>> max_price3('IBM', 205.55)>>>進行這些計算時,請注意zip()創建了一個迭代器,它的內容只能消費一次。例如:
>>> pirces_and_names=zip(prices.values(), prices.keys())>>> pirces_and_names<zip object at 0x023BDFA8>>>> min(pirces_and_names)(10.75, 'FB')>>> max(pirces_and_names)Traceback (most recent call last): File "<pyshell#25>", line 1, in <module> max(pirces_and_names)ValueError: max() arg is an empty sequence>>>
注意:當涉及(value,key)對的比較時,碰巧有多個條目擁有相同的value值,那么此時key將用來作為判定結果的依據。
>>> prices={'AAA':45.23,'ZZZ':45.23}>>> min(zip(prices.values(), prices.keys()))(45.23, 'AAA')>>> max(zip(prices.values(), prices.keys()))(45.23, 'ZZZ')>>>(代碼摘自《Python Cookbook》)
更多關于Python相關內容感興趣的讀者可查看本站專題:《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設計有所幫助。
新聞熱點
疑難解答