将元素添加到集合字典中

时间:2012-02-25 23:31:12

标签: python

我有一套字典d。在某个键key下添加元素时,我会考虑两个案例key in dnot 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])

有更清洁的方法吗?我能统一这两个案子吗?

2 个答案:

答案 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 dd,则无需执行defaultdict检查。虽然该检查仍会返回False,但如果d[el] |= set([randint(0, 10)])中尚未el,则d基本上会产生以下结果:

d[el] = set([])
d[el] |= set([randint(0, 10)])

希望这有帮助