合并2个字典,每个键的值更高

时间:2020-04-08 22:26:53

标签: python

我有

dict1 = {a: 1, b: 2, c: 3}
dict2 = {b: 3, c: 2}

如何合并dict1和dict2,以便结果dict3具有{a:1,b:3,c:3} 我知道我们可以像dict3 = {** a,** b}这样合并,但是我必须写任何条件来使其适用于我的问题吗?

3 个答案:

答案 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)也可以,但是我想避免导入。