假设我们有这两个词典:
a = {"A": "MyText", "B": {"Sub": "Hello", "NextSub": "Bye"}}
b = {"B": {"NextSub": 55}}
如何将它们合并在一起以便我得到这个结果(这样它可以用于每种类型的字典)?
ab = {"A": "MyText", "B": {"Sub": "Hello", "NextSub": 55}}
a.update(b)
只是替换“B”。
我想合并一些dicts,因为我需要处理所有这些。因此,如果我处理一个包含所有dicts的最新信息而不是在for循环中处理更多dicts的合并dict,它会更快。
谢谢!
答案 0 :(得分:1)
对于通用解决方案,您可以使用递归:
l = [[{"A": "MyText", "B": {"Sub": "Hello", "NextSub": "Bye"}},{"B": {"NextSub": 55}}], [{"a": {"a": {"a": 2, "b": "bye"}}}, {"a": {"a": {"a": "Hello"}}}]]
def update(a, b):
if len(a) == len(b):
return {c:d if not isinstance(d, dict) else {**d, **h} if c == e and all(not isinstance(i, dict) for _, i in d.items()) else update(d, h) for [c, d], [e, h] in zip(a.items(), b.items())}
return {c:d if not isinstance(d, dict) else {**d, **b[c]} if all(not isinstance(i, dict) for _, i in d.items()) else update(d, b) for c, d in a.items()}
results = [update(*i) for i in l]
输出:
[{'A': 'MyText', 'B': {'Sub': 'Hello', 'NextSub': 55}}, {'a': {'a': {'a': 'Hello', 'b': 'bye'}}}]