我想通过使用.get()
在重叠(同一个,我的意思)键中添加多个值我已经用这些关键字搜索谷歌,但它们有点不同的问题。所以,我只是在寻找解决这个问题的新方法。
''' dictionary = {}
dictionary [key] = dictionary.get(key,{})+ {value} ''' 但显然这段代码是不可能的,而且还有TypeError +:' set'和'设置' 所以我试着制作两个字典并将默认值设为[]和+ [值] 但它也不起作用......
''' 例如,
key =运动,学习,音乐等...... 价值观=运动:篮球,足球,学习:科学,历史,数学,肌肉:经典等
我想要的结果是......
{'锻炼':{'篮球','足球'},'研究':{'科学' ;,'历史','}'},' muscic':{' classic'} ..} '''
我该怎么办?
答案 0 :(得分:1)
你关闭了,但这不是很正确:
dictionary[key] = dictionary.get(key, {}) + {value}
不幸的是,{}
不是你写一个空的set
的方式(因为它已经意味着一个空的dict
,它会是不明确的);你需要set()
。
您的{value}
已经正确地为set
。
但要将两个集合在一起(即,将所有值从一个集合添加到另一个集合),您需要使用|
,而不是+
。
所以:
dictionary[key] = dictionary.get(key, set()) | {value}
你可以让这更容易:
dictionary.setdefault(key, set()).add(value)
setdefault
执行get
并一步分配所有内容。然后我们通过调用它的add
方法来改变查找或创建的集合。这意味着我们不需要创建一个单元素集{value}
只是为了与旧元素集合,我们可以直接传递value
。
或者,您可以将字典设为defaultdict(set)
,它会自动(实际上)将每个dictionary[key]
转换为dictionary.setdefault(key, set())
。这是好还是坏取决于你是否有一些后来的代码应该查找值而实际上是失败而不是创建空集。
答案 1 :(得分:0)
首先,错误是什么意思?基本上,+
没有为集合定义。
>>> s1 = set([1])
>>> s2 = set([2])
>>> s1 + s2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'set' and 'set'
相反,您需要union
:
>>> s1.union(s2)
set([1, 2])
切换到union
可以解决您的问题(除了{}
是字典的其他答案所指出的),但您可能对defaultdict
感兴趣。类似的东西:
from collections import defaultdict
dictionary = defaultdict(set)
dictionary[key].add(value)
答案 2 :(得分:0)
.get
在缺少值时不会添加值。 .setdefault
does。此外,{}
为空dict
,而不是空set
(set()
)。所以你可以这样做:
dictionary.setdefault(key, set()).add(value)
但这实际上效率很低,因为无论密钥是否已经存在,它都需要构造空set
s。因此,最好的解决方案是use collections.defaultdict
根据需要懒惰地构建新的set
,并根据需要仅(当key
不存在时):< / p>
from collections import defaultdict
dictionary = defaultdict(set)
...
dictionary[key].add(value)