将一个字典合并到另一个只有公共字段的字典中
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}
假设:
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}