1

我有一组与键相关的数字。当键不在字典中时,我想将它与它的值一起添加 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 添加到集合中,而我真正想要添加的只是 03。

任何帮助,将不胜感激。

4

3 回答 3

3

试试这个,添加新的集合元素作为给定键的值:

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)
于 2013-08-05T15:59:54.607 回答
2

使用dict.setdefault

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

或使用collections.defaultdict

d = collections.defaultdict(set)
...
d[key].add(num)
于 2013-08-05T16:01:12.330 回答
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)
于 2013-08-05T16:00:15.763 回答