我有
dict1 = {a: 1, b: 2, c: 3}
dict2 = {b: 3, c: 2}
如何合并dict1和dict2,以便结果dict3具有{a:1,b:3,c:3} 我知道我们可以像dict3 = {** a,** b}这样合并,但是我必须写任何条件来使其适用于我的问题吗?
答案 0 :(得分:3)
您可以将dict项合并到一个元组序列中,对其进行排序,然后使用dict
构造函数从排序后的序列中创建一个新的dict,以便相同键但值较高的项将被覆盖较低的值:
dict(sorted((*dict1.items(), *dict2.items())))
答案 1 :(得分:2)
您在这里:
dict1 = {"a": 1, "b": 2, "c": 3}
dict2 = {"b": 3, "c": 2}
result = {}
for k in dict1.keys() | dict2.keys():
result[k] = max(dict1.get(k, float('-inf')), dict2.get(k,float('-inf')))
print(result)
我正在使用默认值为dict1.get(k, DEFAULT)
的get并将两个键集与按位OR运算符|
连接起来。
请注意,默认值float('-inf')
表示结果为
dict1 = {"a": -1, "b": 2, "c": 3}
dict2 = {"b": -5, "c": 2}```
成为{'a': -1, 'b': 2, 'c': 3}
。
使用默认值0
时,您会得到
{'b': 2, 'c': 3, 'a': 0}
这两种方法都可以被视为同等有效。
答案 2 :(得分:1)
您可以简单地遍历它们并比较值,然后使用dict.setdefault(key, 0)
来获取未设置的值。
dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'b': 3, 'c': 2}
dict3 = {}
for d in dict1, dict2:
for k, v in d.items():
if v > dict3.setdefault(k, 0):
dict3[k] = v
print(dict3) # -> {'a': 1, 'b': 3, 'c': 3}
defaultdict(int)
也可以,但是我想避免导入。