我想将列表转换为字典:
products=[['1','product 1'],['2','product 2']]
arr=[]
vals={}
for product in products:
vals['id']=product[0]
vals['name']=product
arr.append(vals)
print str(arr)
结果是
[{'id': '2', 'name': 'product 2'}, {'id': '2', 'name': 'product 2'}]
但我想要这样的事情:
[{'id': '1', 'name': 'product 1'}, {'id': '2', 'name': 'product 2'}]
答案 0 :(得分:4)
您需要做的是为循环的每次迭代创建一个新字典。
products=[['1','product 1'],['2','product 2']]
arr=[]
for product in products:
vals = {}
vals['id']=product[0]
vals['name']=product[1]
arr.append(vals)
print str(arr)
当你append
像数组的字典这样的对象时,Python 在附加之前不会复制。它会将确切的对象附加到数组中。因此,如果将dict1
添加到数组中,然后更改dict1
,则数组的内容也将更改。因此,您应该每次都制作一本新词典,如上所述。
答案 1 :(得分:1)
为简单起见,你也可以把它变成一个单线:
products=[['1','product 1'],['2','product 2']]
arr= [{"id":item[0], "name":item[1]} for item in products]
哪个收益率:
[{'id': '1', 'name': 'product 1'}, {'id': '2', 'name': 'product 2'}]
答案 2 :(得分:1)
products=[['1','product 1'],['2','product 2']]
arr=[{'id':a[0], 'name': a[1]} for a in products]
print str(arr)
也会有用
答案 3 :(得分:0)
products=[['1','product 1'],['2','product 2']]
arr=[]
for product in products:
vals = {}
for i, n in enumerate(['id', 'name', ....]): # to make it more dynamic?
vals[n]=product[i]
arr.append(vals)
或者只是使用[0],[1],如前一篇文章所述