||
(一)有序字典OrderedDic()
很多人认为python中的字典是无序的,因为它是按照hash来存储的,但是python中有个模块collections(英文,收集、集合),里面自带了一个子类
OrderedDict,实现了对字典对象中元素的排序。请看下面的实例:
1 import collections
2 print "Regular dictionary"
3 d={}
4 d['a']='A'
5 d['b']='B'
6 d['c']='C'
7 for k,v in d.items():
8 print k,v
9
10 print "\nOrder dictionary"
11 d1 = collections.OrderedDict()
12 d1['a'] = 'A'
13 d1['b'] = 'B'
14 d1['c'] = 'C'
15 d1['1'] = '1'
16 d1['2'] = '2'
17 for k,v in d1.items():
18 print k,v
19
20 输出:
21 Regular dictionary
22 a A
23 c C
24 b B
25
26 Order dictionary
27 a A
28 b B
29 c C
30 1 1
31 2 2
可以看到,同样是保存了ABC等几个元素,但是使用OrderedDict会根据放入元素的先后顺序进行排序。所以输出的值是排好序的。
OrderedDict对象的字典对象,如果其顺序不同那么Python也会把他们当做是两个不同的对象,请看事例:
1 print 'Regular dictionary:'
2 d2={}
3 d2['a']='A'
4 d2['b']='B'
5 d2['c']='C'
6
7 d3={}
8 d3['c']='C'
9 d3['a']='A'
10 d3['b']='B'
11
12 print d2 == d3
13
14 print '\nOrderedDict:'
15 d4=collections.OrderedDict()
16 d4['a']='A'
17 d4['b']='B'
18 d4['c']='C'
19
20 d5=collections.OrderedDict()
21 d5['c']='C'
22 d5['a']='A'
23 d5['b']='B'
24
25 print d1==d2
26
27 输出:
28 Regular dictionary:
29 True
30
31 OrderedDict:
32 False
再看几个例子:
dd = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
#按key排序
kd = collections.OrderedDict(sorted(dd.items(), key=lambda t: t[0]))
print kd
#按照value排序
vd = collections.OrderedDict(sorted(dd.items(),key=lambda t:t[1]))
print vd
#输出
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
对函数进行简单说明(关键)
语法:
sorted(d.items(), key=lambda x: x[1])
参数:
d.items() 为待排序的对象
key=lambda 变量:变量[维数]
key=lambda x: x[1] 为对前面的对象中的第二维数据(即value)的值进行排序。其中x:x[ ]字母可以随意修改,排序方式按照中括号[]里面的维度进行排序,[0]按照第一维排序,[2]按照第三维排序,依次类推。
示例:
#数据维数以数字来表达:
d = {"a":15,"b":16,"c":37,"d":24}
b=sorted(d.items(), key=lambda x: x[1])
print(b)
输出:
[('a', 15), ('b', 16), ('d', 24), ('c', 37)]
示例:
#维数以字符串表达
a = [{'name':'a','age':15},{'name':'b','age':31},{'name':'c','age':28}]
b=sorted(alist,key=lambda x:x['age'],reverse=True)
print(b)
输出:
[{'name': 'b', 'age': 31}, {'name': 'c', 'age': 28}, {'name': 'a', 'age': 15}]
附:
点滴分享,福泽你我!Add oil!
【参考】
https://www.cnblogs.com/gide/p/6370082.html
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-25 14:43
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社