本文实例讲述了Python cookbook(数据结构与算法)字典相关计算问题。分享给大家供大家参考,具体如下:
问题:在字典上对数据执行各式各样的计算(比如求最小值、最大值、排序)。
解决方案:利用zip()
将字典的键-值对“反转”为值-键对序列。
例如:如下字典存放的股票名称和对应的价格:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
>>> 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()
创建了一个迭代器,它的内容只能消费一次。例如:
1
2
3
4
5
6
7
8
9
10
11
|
>>> 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将用来作为判定结果的依据。
1
2
3
4
5
6
|
>>> 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程序设计有所帮助。
原文链接:http://www.cnblogs.com/apple2016/p/5746514.html