创建字典并添加集合作为其值

时间:2013-08-05 15:54:28

标签: python python-2.7

我有一组与密钥相关的数字。当密钥不在字典中时,我想将它和它的值一起添加一个set(),并且密钥存在,我想只是该密钥的现有集合的数字。我这样做是这样的:

for num in datasource:    
    if not key in dict.keys():
        dict[key] = set().add(num)
    else:
        dict[key].add(num)

但问题是,当我添加数字03时,它会在我真正想要添加的内容中添加0,3,03。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

尝试此操作,将新的set元素添加为给定键的值:

d = {}
d.setdefault(key, set()).add(value)

或者,使用defaultdict

from collections import defaultdict
d = defaultdict(set)
d[key].add(value)

任何一种解决方案都会有效地创建一个multimap:一个数据结构,对于给定的密钥,它可以包含多个值 - 在这种情况下,在set内。特别是对于您的示例,这是您使用它的方式:

d = {}
for num in datasource:
    d.setdefault(key, set()).add(num)

可替换地:

from collections import defaultdict
d = defaultdict(set)
for num in datasource:
    d[key].add(num)

答案 1 :(得分:2)

使用dict.setdefault

d.setdefault(key, set()).add(num)

或使用collections.defaultdict

d = collections.defaultdict(set)
...
d[key].add(num)

答案 2 :(得分:1)

我看到的问题是set().add(num)会返回None,因此dict[key]会初始化为None

要解决此问题,您可以使用set([num])初始化该集:

if not key in dict.keys():
      dict[key] = set([num])
else:
      dict[key].add(num)