使用for循环创建python字典列表

时间:2021-01-05 12:43:50

标签: python json list for-loop

我尝试使用以下代码创建一个 python 字典列表enter code here

d={}
dlist=[]
key=["aa","bb","cc"]
file=["fileA","fileB","fileC"]

for i in range(len(key)):
  d['key']=key[i]
  d['file']=file[i]
  dlist.append(d)
  print(d)
print(dlist)

dlist 节目

[{'key': 'cc', 'file': 'fileC'}, {'key': 'cc', 'file': 'fileC'}, {'key': 'cc', 'file': 'fileC'}]

请解释原因?

3 个答案:

答案 0 :(得分:2)

您永远不会制作 d 字典的新副本,因此您只是覆盖了同一个字典,而列表仅包含对同一字典的 3 个引用。只需在 for 循环内移动 d 的声明。

for i in range(len(key)):
  d = {}
  ...

答案 1 :(得分:0)

您可以通过列表理解来实现这一点

>>> dlist = [{'key':k, 'file':f} for k,f in zip(key, file)]
>>> dlist
[{'key': 'aa', 'file': 'fileA'}, {'key': 'bb', 'file': 'fileB'}, {'key': 'cc', 'file': 'fileC'}]

您当前代码的问题在于您正在重复使用您的 dict d 而不是在您的 for 循环中创建一个新对象。

答案 2 :(得分:0)

发生这种情况是因为您在列表中附加了 dict d 引用,因此对于所有 for 循环迭代,添加了相同的 dict 引用,即 id 中所有元素的 dlist 是相同的。因为在那里添加了最后一次迭代值。

下面的代码可以帮助您解决在每个 for 循环中创建一个新字典然后将其附加到列表中的问题

dlist=[]
key=["aa","bb","cc"]
file=["fileA","fileB","fileC"]

for i in range(len(key)):
  d = {}
  d['key']=key[i]
  d['file']=file[i]
  dlist.append(d)
  print(d)
print(dlist)