一、 collections 中 defaultdict 的使用
1.一个字典映射多个值:
待处理字典:
l = [(‘a’,2),(‘b’,3),(‘a’,1),(‘b’,4),(‘a’,3),(‘a’,1),(‘b’,3)]
不用defaultdict时需要给字典的value设置默认值(防止key对应的value不存在):
l = [('a',2),('b',3),('a',1),('b',4),('a',3),('a',1),('b',3)] d = {} for key,value in l: # setdefault()方法用于获取指定key对应的value # 如果该key不存在,则先将该key对应的value设置为默认值:[] d.setdefault(key,[]).append(value) print(d) print(list(d.items()))
运行结果:
{‘a’: [2, 1, 3, 1], ‘b’: [3, 4, 3]}
[(‘a’, [2, 1, 3, 1]), (‘b’, [3, 4, 3])]
有了defaultdict后,方便了很多:
l = [('a',2),('b',3),('a',1),('b',4),('a',3),('a',1),('b',3)] from collections import defaultdict # 创建defaultdict,设置由list()函数来生成默认值 d1 = defaultdict(list) for key,value in l: # 直接访问defaultdict中指定key对应的value即可。 # 如果该key不存在,defaultdict会自动为该key生成默认值 d1[key].append(value) print(d1)
运行结果:
defaultdict(<class ‘list’>, {‘a’: [2, 1, 3, 1], ‘b’: [3, 4, 3]})
2.统计字典中某个值出现的总和
列表中有很多字典,需要统计字典中相同的键对应的值的和
利用 defaultdict 设置默认值的方法 defaultdict(int)
from collections import defaultdict d = defaultdict(int) #以下四个key-value,对应本人大学期间考的四六级分数=_= score = [{'cet4':547},{'cet6':450},{'cet6':464},{'cet6':437},{'cet6':445}] for s in score: for key,value in s.items(): d[key] += value print(d)
运行结果:
defaultdict(<class ‘int’>, {‘cet4’: 547, ‘cet6’: 1796})
同理,统计字典中某个值出现的次数
from collections import defaultdict d = defaultdict(int) #以下四个key-value,对应本人大学期间考的四六级分数=_= score = [{'cet4':547},{'cet6':450},{'cet6':464},{'cet6':437},{'cet6':445}] for s in score: for key,value in s.items(): d[key] += 1 print(d)
运行结果:
defaultdict(<class ‘int’>, {‘cet4’: 1, ‘cet6’: 4})
二、collections 创建有序字典
字典dict是无序的,如果我们想要有序的dict,可以使用OrdereDict
OrderedDict 内部维护着一个根据键插入顺序排序的双向链表。每次当一个新的元素插入进来的时候,它会被放到链表的尾部。对于一个已经存在的键的重复赋值不会改变键的顺序。
需要注意的是,一个 OrderedDict 的大小是一个普通字典的两倍,因为它内部维护着另外一个链表。
改变 key-value 的顺序
move_to_end 还接收一个关键字参数 last。last 默认为True,当 last = False 的时候,表示将该键移动到最前面。
删除 key_value
如果我们要删除有序字典中的 key-value, 可以使用 popitem 方法, popitem(last=True) 按照先进后出的顺序删除 dict中的key-value,popitem(last=False) 按照先进先出的规则删除 dict 中的 key-value。
三、字典排序
1.按照key进行排序
2.按照value进行排序
四、通过某个关键字排序一个字典列表
from operator import itemgetter
通过使用operator模块的 itemgetter函数实现
参考教程:
http://c.biancheng.net/view/2436.html
https://mp.weixin.qq.com/s/o4eX4H7hYjGIZiUND86kbw