2014-08-28 3 views
-2

Я хочу, чтобы преобразовать список в словарь:конвертировать массив Сыроватского

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

Не может быть более полезным результатом '{'1': 'product 1', '2': 'product 2'}'? –

ответ

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, тогда содержимое массива также изменится. По этой причине вы должны создавать новый словарь каждый раз, как указано выше.

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], как указано в предыдущем посте

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'}] 
1
products=[['1','product 1'],['2','product 2']] 
arr=[{'id':a[0], 'name': a[1]} for a in products] 

print str(arr) 

бы работать

Смежные вопросы