我有一组与密钥相关的数字。当密钥不在字典中时,我想将它和它的值一起添加一个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。
任何帮助将不胜感激。
答案 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)
d.setdefault(key, set()).add(num)
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)