关于字典:如何在Python中连接字典

How to concatenate dicts in Python

我有以下口述:

1
2
3
4
5
6
7
8
9
10
11
one: {
  'param': {
    'a': 1
  }
}

one: {
  'param': {
    'b': 1
  }
}

我想将两者结合起来创建three

1
2
3
4
5
6
one: {
  'param': {
    'a': 1,
    'b': 2
  }
}

这有可能吗?


使用收款模块中的ChainMap

1
2
3
4
5
6
from collections import ChainMap
...
d1 = dict(...)
d2 = dict(...)

chainmap1 = ChainMap(d1,d2)

您可以尝试以下操作:

1
2
3
d1 = {'param': {'a': 1}}
d2 = {'param': {'b': 1}}
d1['param'].update(d2['param'])

输出:

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

或者,对于更通用的解决方案:

1
2
3
4
def get_dict(d1, d2):
   return {a: dict(c.items()+d.items()) if all(not isinstance(h, dict) for _, h in c.items()) and all(not isinstance(h, dict) for _, h in d.items()) else get_dict(c, d) for (a, c), (_, d) in zip(d1.items(), d2.items())}

 print(get_dict({'param': {'a': 1}}, {'param': {'b': 1}}))

输出:

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


这个解决方案将创建一个保存旧字典的新字典:dict(first_dict.items() + second_dict.items())

在您的特定情况下:

1
three = {'param': dict(one['param'].items() + two['param'].items())}

这是一条路。您需要python 3.5+。

1
2
3
4
5
6
one = {'param': {'a': 1}}
two = {'param': {'b': 1}}

three = {'param': {**one['param'], **two['param']}}

# {'param': {'a': 1, 'b': 1}}