我找不到任何类似的代码,所以我的初级问题需要您的帮助。我将代码总结如下:
A=[{'a': '1', 'b': '2'}]
L=['x', 'y']
B=[]
for i in A:
for j in L:
i["c"]=j
B.append(i)
print(B)
输出为:
[{'a': '1', 'b': '2', 'c': 'y'}, {'a': '1', 'b': '2', 'c': 'y'}]
我需要的是:
[{'a': '1', 'b': '2', 'c': 'x'}, {'a': '1', 'b': '2', 'c': 'y'}]
感谢您的帮助。
答案 0 :(得分:3)
更简洁,但可读性更差的版本:
A = [{'a': '1', 'b': '2'}]
L = ['x', 'y']
B = [ {**z, 'c': j } for j in L for z in A ]
答案 1 :(得分:2)
您需要在循环中复制字典,否则它将两次添加同一字典。
在后台,它使用指向原始词典的指针。这意味着您正在编辑同一词典。添加对象时,您正在编辑原始对象,然后说“该对象在列表中两次。
这是代码...
object
答案 2 :(得分:0)
关键是您需要确保正在创建新词典,而不是在A
中修改原始词典。这是使用zip
的一种方法:
B = [{**a, **c} for a, c in zip(A*2, [{'c': v} for v in L])]
答案 3 :(得分:0)
正如其他人所说,您必须复制字典,因为将其存储到的变量是一个对象,因此修改该对象将影响它出现的所有位置。
a = {'a': 'example'}
B = [a]
#B[0] is a, so modifying a, also updates B[0]
a['a'] = 'test'
print(a) #{'a': 'test'}
print(B[0]) #{'a': 'test'}
我想指出更新功能的可能性。 更新功能基本上是通过从源词典向其添加新键来更新现有词典。
示例:
a = {'a': 1, 'b': 2}
c = {'c': 3}
a.update(c) #{'a': 1, 'b': 2, 'c': 3}
将其应用于您的代码:
A={'a': '1', 'b': '2'}
L=['x', 'y']
import copy
B = []
for j in L:
mod_info = {'c': j}
A.update(mod_info)
B.append(copy.copy(A))
print(B)