Python字典数据计算技巧:利用zip反转键值对
本文介绍如何在Python字典中执行最小值、最大值及排序等计算。核心方案是利用zip函数将键值对反转为值键对序列。需注意zip生成的是单次消费的迭代器,且当值相同时,键将作为比较依据。文章通过代码示例展示了正确用法及常见参数顺序错误。
本文分享了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程序设计工作提供实际帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









