【发布时间】:2019-01-05 18:11:32
【问题描述】:
我有两个字典列表如下:
x=[{'id':1, 'var1':2},
{'id':1, 'var1':2},
{'id':2, 'var1':2}]
y=[{'var2':1, 'var3':2},
{'var2':3, 'var3':3},
{'var2':4, 'var3':4}]
我想将每个dict合并到另一个dict中,所以输出如下:
z=[{'id':1, 'var1':2, 'var2':1, 'var3':2},
{'id':1, 'var1':2, 'var2':3, 'var3':3},
{'id':2, 'var1':2, 'var2':4, 'var3':4}]
但是,当我使用以下合并功能时:
def merge_x_and_y(x_data, y_data):
for x_entry, y_entry in zip(x_data, y_data):
x_entry.update(y_entry )
return x_data
我最终得到:
z=[{'id':1, 'var1':2, 'var2':1, 'var3':2},
{'id':1, 'var1':2, 'var2':1, 'var3':2},
{'id':2, 'var1':2, 'var2':2, 'var3':3}]
因此,如果 x 中的 dict 是重复的,它会复制 y 中的 dict,这是我不想要的。我希望每个 x dict 与不同的 y dict 合并(即使 x dict 是重复的)。
有没有办法将每个 x dict 与忽略重复的 y dict 合并?
编辑:
上面的代表有效,但我的实际代码中仍然没有得到正确的结果。我认为这可能与 Lenik 的建议有关,相同的元素可能会被引用两次。
在合并之前,我尝试使用以下方法扩展数据:
def expand_x(x):
processed_x_data = []
[processed_x_data .extend([entry]*entry['count']) for entry in x]
return processed_x_data
完成这一步后,我是否应该为每个条目重新分配一个唯一的 id 以避免重复引用?
【问题讨论】:
-
这不是在 python 中制作字典的方式。它们应该看起来像 {key1: value1, key2: value2}
-
有效点 - 我将编辑
-
有多种方法可以合并 dict,但 dict 是内置类型。 stackoverflow.com/questions/38987/…
-
您的代码有效。
-
第二个@RafaelC。当我使用您的代码时,(我将您的变量更改为字符串)和
z = merge_x_y(x, y)我得到了预期的输出。值得注意的是z==x,这样以后如果你对x做点什么,就会影响z
标签: python list dictionary merge