将数组转换为字典

6 投票
4 回答
28226 浏览
提问于 2025-04-18 18:52

我想把一个列表转换成字典:

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
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]。

2
products=[['1','product 1'],['2','product 2']]
arr=[{'id':a[0], 'name': a[1]} for a in products]

print str(arr)

这也可以用。

3

为了简单起见,你可以把这个写成一行代码:

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

你需要在每次循环的时候创建一个新的字典。

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,那么数组里的内容也会跟着改变。为了避免这种情况,你应该每次都创建一个新的字典,就像上面那样。

撰写回答