如果字典包含可以保存引用的内容,则可以使用一个字典查找对其进行默认或更新:
d.setdefault('k', []).append(2)
但是,如果他们的数字是
,则无法以相同的方式修改字典条目d.setdefault('k', 0) += 1 # doesn't work
相反,您需要执行两次dict查找,一次用于读取,一次用于写入:
d['a'] = d.get('a', 0) + 1
对于拥有大量按键的词典来说,这似乎不是一个好主意。那么,有没有办法对包含数字的字典进行默认或更新操作?或者,换句话说,对这些词典应用默认或更新操作的最佳方式是什么?
答案 0 :(得分:1)
快速测试表明collections.defaultdict
比双重查找速度快2.5倍(在Python 2.6上测试):
>>> import timeit
>>> s1 = "d = dict((str(n), 0) for n in range(1000000))"
>>> timeit.repeat("d['a'] = d.get('a', 0) + 1", setup=s1)
[0.17711305618286133, 0.17411494255065918, 0.17812514305114746]
>>> s2 = """
... from collections import defaultdict
... d = defaultdict(int, ((str(n), 0) for n in range(1000000)))
... """
>>> timeit.repeat("d['a'] += 1", setup=s2)
[0.07185506820678711, 0.07294416427612305, 0.12155508995056152]