脚本宝典收集整理的这篇文章主要介绍了

Python每日一练0007

脚本宝典小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助你少写一行代码,多一份安全和惬意。

问题

怎样实现一个键对应多个值的字典(也叫 multidict)?

例如:

d = {
    'a' : [1, 2, 3],
    'b' : [4, 5]
}
e = {
    'a' : {1, 2, 3},
    'b' : {4, 5}
}

解决方案

使用collections模块中的defaultdict

defaultdict的特点是,当key不存在时,会自动创建它,也就是说我们不用再像dict一样首先判断key是否存在了,下面是一个例子:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d['a'].append(1)
>>> d['a'].append(2)
>>> d['a'].append(3)
>>> d['b'].append(4)
>>> d['b'].append(5)
>>> print(d)
defaultdict(<class 'list'>, {'a': [1, 2, 3], 'b': [4, 5]})

当然,也可以用dictsetdefault函数来实现同样的效果,但看起来会比较“丑陋”

>>> d = dict()
>>> d.setdefault('a', []).append(1)
>>> d.setdefault('a', []).append(2)
>>> print(d)
{'a': [1, 2]}

讨论

根据Python3官方文档对defaultdict的介绍可以了解到

defaultdictdict的子类,defaultdict重写了dict__missing__方法,并且增加了一个可以修改的default_factory成员

defaultdict的key不存在时,会将key初始化为调用default_factory得到的返回值,default_factory可以在初始化时指定,也可以随后再进行改变

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d['l'].append(1)
>>> d.default_factory = set
>>> d['s'].add(2)
>>> print(d)
defaultdict(<class 'set'>, {'l': [1], 's': {2}})

来源

Python Cookbook

关注

欢迎关注我的微信公众号:python每日一练

总结

以上是脚本宝典为你收集整理的

Python每日一练0007

全部内容,希望文章能够帮你解决

Python每日一练0007

所遇到的程序开发问题,欢迎加入QQ群277859234一起讨论学习。如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典网站推荐给程序员好友。 本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。

80%的人都看过