手记

Python 字典的高级用法

一、 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函数实现

0人推荐
随时随地看视频
慕课网APP