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