怎样实现一个键对应多个值的字典(也叫 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]})当然,也可以用dict的setdefault函数来实现同样的效果,但看起来会比较“丑陋”
>>> d = dict() >>> d.setdefault('a', []).append(1) >>> d.setdefault('a', []).append(2) >>> print(d) {'a': [1, 2]}根据Python3官方文档对defaultdict的介绍可以了解到
defaultdict是dict的子类,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每日一练