我有两个Python字典,我想编写一个返回这两个字典的表达式,合并.update()
如果它返回结果而不是就地修改dict,那么该方法将是我需要的.
>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 10, 'c': 11}
>>> z = x.update(y)
>>> print(z)
None
>>> x
{'a': 1, 'b': 10, 'c': 11}
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得最终合并的词典z
,不是x
吗?
(要清楚的是,最后一次胜利的冲突处理dict.update()
也是我正在寻找的.)
我怎么能把这样的词典列表
[{'a':1}, {'b':2}, {'c':1}, {'d':2}]
Run Code Online (Sandbox Code Playgroud)
进入这样一个单词
{'a':1, 'b':2, 'c':1, 'd':2}
Run Code Online (Sandbox Code Playgroud) 我有多个dicts /键值对,如下所示:
d1 = {key1: x1, key2: y1}
d2 = {key1: x2, key2: y2}
Run Code Online (Sandbox Code Playgroud)
我希望结果是一个新的dict(如果可能的话,以最有效的方式):
d = {key1: (x1, x2), key2: (y1, y2)}
Run Code Online (Sandbox Code Playgroud)
实际上,我希望结果d是:
d = {key1: (x1.x1attrib, x2.x2attrib), key2: (y1.y1attrib, y2.y2attrib)}
Run Code Online (Sandbox Code Playgroud)
如果有人告诉我如何获得第一个结果,我可以弄清楚其余部分.
我必须合并python字典列表.例如:
dicts[0] = {'a':1, 'b':2, 'c':3}
dicts[1] = {'a':1, 'd':2, 'c':'foo'}
dicts[2] = {'e':57,'c':3}
super_dict = {'a':[1], 'b':[2], 'c':[3,'foo'], 'd':[2], 'e':[57]}
Run Code Online (Sandbox Code Playgroud)
我写了以下代码:
super_dict = {}
for d in dicts:
for k, v in d.items():
if super_dict.get(k) is None:
super_dict[k] = []
if v not in super_dict.get(k):
super_dict[k].append(v)
Run Code Online (Sandbox Code Playgroud)
它可以更优雅/优化呈现吗?
注意 我在SO上发现了另一个问题,但它关于合并2个字典.
我有两个想要合并的词组:
a = {"name": "john",
"phone":"123123123",
"owns": {"cars": "Car 1", "motorbikes": "Motorbike 1"}}
b = {"name": "john",
"phone":"123",
"owns": {"cars": "Car 2"}}
Run Code Online (Sandbox Code Playgroud)
如果a
并且b
在同一嵌套级别上具有公共密钥,则结果应该是一个列表,其中包含两个值,该值被指定为共享密钥的值.
结果应如下所示:
{"name": "john",
"phone":["123123123","123"],
"owns": {"cars": ["Car 1", "Car 2"], "motorbikes": "Motorbike 1"}}
Run Code Online (Sandbox Code Playgroud)
使用a.update(b)
不起作用,因为它用共享值覆盖a
共享值b
,这样结果是这样的:
{'name': 'john', 'phone': '123', 'owns': {'cars': 'Car 2'}}
Run Code Online (Sandbox Code Playgroud)
目标是合并dicts而不覆盖,并保留与特定密钥相关的所有信息(在任何一个dicts中).