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

使用for循环创建python字典列表,python,json,list,for-loop,Python,Json,List,For Loop,我试图用下面的代码输入代码创建一个python字典列表 数据列表显示 [{'key': 'cc', 'file': 'fileC'}, {'key': 'cc', 'file': 'fileC'}, {'key': 'cc', 'file': 'fileC'}] 请解释原因?您可以通过列表理解来实现这一点 >>> dlist = [{'key':k, 'file':f} for k,f in zip(key, file)] >>> dlist [{'key'

我试图用下面的代码输入代码创建一个python字典列表

数据列表显示

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

请解释原因?

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

>>> 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循环中创建新对象。

您从未创建d字典的新副本,因此您只是覆盖了同一个字典,而列表仅包含对同一字典的3个引用。只需在for循环中移动d的声明

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

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

下面的代码可以帮助您解决在每个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)
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)