将一个字典合并到另一个只有公共字段的字典中

Merge a dict into another with common fields only

假设:

a = {'a': 1, 'b': 2}
b = {'b': 22, 'c': 3}

如何将 b 合并到 a 中,只设置那些已经存在于 a 中的属性,而忽略所有其他属性?

这是我想出的解决方案:

a |= {k: v for k, v in b.items() if k in a.keys()}
{'a': 1, 'b': 22}

但我不确定这有多 pythonic。对于这种“简单”的操作来说感觉有点过于冗长并且可能存在更好的解决方案。 我最关心的是 Python >= 3.9.

提前感谢您的建议。

我不确定 Pythonic,但您可以查看 set 操作,例如 set.intersection:

a = {'a': 1, 'b': 2}
b = {'b': 22, 'c': 3}

for common_key in set(a).intersection(b):
    a[common_key] = b[common_key]

print(a)

如果你想要一个 Python 式单行代码,你可以使用一个 dict 类似于你的理解:

a = {k : v for k, v in (a | b).items() if k in a}

结果:

{'a': 1, 'b': 22}

这里是关于这个 post 的解决方案:Update dict without adding new keys?

a.update((k, b[k]) for k in set(b).intersection(a))

一个输出:

{'a': 1, 'b': 22}