一键多值字典🔆InTheEnd!

「这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战

一键多值字典

字典是一种关联容器,每个键都映射到一个单独的值上,如果想让键映射到多个值,需要将这多个值保存到另一个容器如列表或集合中;

如果希望保留元素插入的顺序,就用列表;如果希望消除重复元素且不在意他们的顺序,就用集合。

在Python程序中,可以创建将某个键映射到多个值的字典,即一键多值字典[multidict]。

具体操作:

为了能方便地创建映射多个值的字典,可以使用内置模块collections中的defaultdict()函数来实现。(这个函数一个主要特点是当所访问的键不存在的时候,可以实例化一个值作为默认值,也就是说我们在使用这个函数创建字典时就只需要关注添加元素即可。)

比如如下字典d和e就是两种典型的一键多值字典,那么,如何使用defaultdict()函数来实现呢?
d = {
    'a': [1, 2, 3],
}

e = {
    'a': {1, 2, 3},
}
复制代码

上代码:

from collections import defaultdict
d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)
d['a'].append(3)
print(d)
print(d['a'])		# 字典中的查操作依旧同我们第一小节课讲的那样。


d = defaultdict(set)
d['a'].add(1)
d['a'].add(2)
d['a'].add(3)
print(d)
复制代码

在这里插入图片描述

但是,我们使用函数defaultdict()会自动创建字典表项以待后面使用。如果不想要这个功能的话,老师现在再教你们一种新的方法:
我们可以在普通的字典上调用函数setdefault()来取代此处用的defaultdict()函数。

上代码:

d = {}
d.setdefault('a', []).append(1)
d.setdefault('a', []).append(2)
d.setdefault('b', []).append(3)
print(d)
复制代码

在这里插入图片描述

知识补给站:

dict =defaultdict( factory_function)		# defaultdict接受一个工厂函数作为参数


from collections import defaultdict

dict1 = defaultdict(int)
dict2 = defaultdict(set)
dict3 = defaultdict(str)
dict4 = defaultdict(list)
dict1[2] = 'nice'		#无则增!

# 这样会正常显示dict1字典里key为2对应的value。
print(dict1[2])

# 我们访问的是通过defaultdict()函数创建的四个字典的key为1对应的值,
# 但是这个key在这四个字典中都并不存在哦,所以返回相应的默认值!
print(dict1[1])		
print(dict2[1])
print(dict3[1])
print(dict4[1])

# 输出:
nice
0
set()

[]
复制代码
知识补给站升级:
该函数除了接受类型名称作为初始化函数的参数之外,还可以使用任何不带参数的可调用函数,到时该函数的返回值则作为默认值,这样使得默认值的取值更加灵活。下面用一个例子来说明,如何用自定义的不带参数的函数zero()作为初始化函数的参数:

from collections import defaultdict
def zero():
	return 0
dict = defaultdict(zero)
print(dict)

print(dict['first'])

print(dict)
复制代码

在这里插入图片描述

🔆In The End!

请添加图片描述

从现在做起,坚持下去,一天进步一小点,不久的将来,你会感谢曾经努力的你!

本博主会持续更新爬虫基础分栏及爬虫实战分栏,认真仔细看完本文的小伙伴们,可以点赞收藏并评论出你们的读后感。并可关注本博主,在今后的日子里阅读更多爬虫文!

如有错误或者言语不恰当的地方可在评论区指出,谢谢!
如转载此文请联系我征得本人同意,并标注出处及本博主名,谢谢 !