我有一套字典d
。在某个键key
下添加元素时,我会考虑两个案例key in d
和not key in d
:
from random import randint
for i in range(1000):
key = randint(0, 100)
if key in d:
d[key] |= set([randint(0, 10)])
else:
d[key] = set([randint(0, 10])
有更清洁的方法吗?我能统一这两个案子吗?
答案 0 :(得分:6)
我喜欢使用defaultdict,这是一种在您引用尚未定义的键时创建默认对象的字典:
>>> from random import randint
>>> from collections import defaultdict
>>>
>>> d = defaultdict(set)
>>>
>>> for i in range(10):
... el = randint(0, 5)
... d[el].add(randint(0,10))
...
>>> d
defaultdict(<type 'set'>, {0: set([2]), 1: set([7]), 2: set([8, 9, 5, 7]),
3: set([1]), 4: set([1, 3, 4])})
>>> d[0]
set([2])
>>> d[2]
set([8, 9, 5, 7])
答案 1 :(得分:0)
试试[defaultdict](http://docs.python.org/library/collections.html#collections.defaultdict)
s:from collections import defaultdict
defaultdict
采用“default factory
”参数。基本上,它允许您为尚未“初始化”的键设置默认值。
因此,在您的示例中,如果if el in d
是d
,则无需执行defaultdict
检查。虽然该检查仍会返回False
,但如果d[el] |= set([randint(0, 10)])
中尚未el
,则d
基本上会产生以下结果:
d[el] = set([])
d[el] |= set([randint(0, 10)])
希望这有帮助