将列表成员作为值添加到字典中

时间:2020-05-13 16:33:10

标签: python list dictionary

我找不到任何类似的代码,所以我的初级问题需要您的帮助。我将代码总结如下:

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'}]

感谢您的帮助。

4 个答案:

答案 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)