一、 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函数实现
共同学习,写下你的评论
评论加载中...
作者其他优质文章