2014-08-28 111 views
-2

我想一個列表轉換爲一個字典:轉換陣列與dict

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'}'? – 2014-08-28 17:54:27

回答

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) 

也將工作