将数组转换为dict

时间:2014-08-28 17:45:35

标签: python arrays dictionary

我想将列表转换为字典:

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'}]

4 个答案:

答案 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],如前一篇文章所述