我尝试使用以下代码创建一个 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'}]
请解释原因?
答案 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)