微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python:字典列表在每次迭代中仅存储最后附加的值

如何解决Python:字典列表在每次迭代中仅存储最后附加的值

让我们逐步回顾一下循环主体的逻辑:

  1. 接受其中一项
  2. 修改
  3. 将其附加到列表的末尾

因此,您错过的关键点是您修改并附加了第一步中选择的对象。并且在代码片段的末尾word_db2包含六个对象引用,但只有两个唯一。结果,输出显示相似的行。

您可以在修改和附加字典之前对其进行 :

for j in range(1, 4):
    i = dict(i)
    i['Card Type'] = 'Type '+str(j)
    i['Card Key'] = key
    print(i)

    word_db2.append(i)
    key += 1

进一步说明,如果dict包含其他可变对象(例如嵌套dict),则应进行 :

import copy
old_dict = {'a': [1, 2, 3], 'b': [4, 5, 6]}
new_dict = copy.deepcopy(old_dict)
old_dict['a'][1] = 7
new_dict['a'][1] # 2

解决方法

我有这个字典清单:

MylistOfdict = [{'Word': 'surveillance','Word No': 1},{'Word': 'equivocal','Word No': 2}]

我想创建一个新的字典列表(word_db2),其中的每个字典都有3个字典MylistOfdict。除了MylistOfdict的键和值之外,这些词典中的每一个都应具有值类型为1,类型2,类型3的“卡类型”键和具有增量值的“卡密钥”键

码:

word_db2 = []

key = 1
for i in MylistOfdict:
    for j in range(1,4):
        i['Card Type'] = 'Type '+str(j)
        i['Card Key'] = key
        print(i)

        word_db2.append(i)
        key += 1

输出:

{'Word No': 1,'Card Key': 1,'Word': 'surveillance','Card Type': 'Type 1'}
{'Word No': 1,'Card Key': 2,'Card Type': 'Type 2'}
{'Word No': 1,'Card Key': 3,'Card Type': 'Type 3'}
{'Word No': 2,'Card Key': 4,'Word': 'equivocal','Card Type': 'Type 1'}
{'Word No': 2,'Card Key': 5,'Card Type': 'Type 2'}
{'Word No': 2,'Card Key': 6,'Card Type': 'Type 3'}

此输出是正确的,但word_db2在每次迭代中仅存储最后附加的值

print(word_db2)

输出:

[{'Card Key': 3,'Card Type': 'Type 3',{'Card Key': 3,{'Card Key': 6,'Word No': 2},'Word No': 2}]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。