2017-04-23 161 views
1

我有一個我的字典'鍵'的標題列表和我想用作'值'的嵌套列表,我想返回一個字典列表。但是,當我遍歷嵌套列表和標題列表並將字典添加到列表時,我只能得到最後一個字典。 我在這裏做錯了什麼?如何創建一個從嵌套列表字典列表

rows = [['Branden',27,'M'],['Casey',22,'F'],['Paul',30,'M']] 
header = ['Name','Age','Gender'] 
d = {} 
data = [] 
for item in rows: 
    for key,value in zip(header,item): 
     d[key] = value 
data.append(d) 

data 

輸出我得到:

[{'Age': 30, 'Gender': 'M', 'Name': 'Paul'}, 
{'Age': 30, 'Gender': 'M', 'Name': 'Paul'}, 
{'Age': 30, 'Gender': 'M', 'Name': 'Paul'}] 

我所需的輸出:

[{'Name': 'Branden', 'Age': 27, 'Gender': 'M'}, 
{'Name': 'Casey', 'Age': 22, 'Gender': 'F'}, 
{'Name': 'Paul', 'Age': 30, 'Gender': 'M'}] 

我在做什麼錯在這裏?

+2

更多的代碼,請,你的措辭沒有清楚地描述你遇到的問題,也沒有解決你所尋求的解決方案。 – EyuelDK

+0

你*只有一個字典*。爲每個條目創建一個新的;在循環內移動'd = {}'**。 – jonrsharpe

+0

請將您的代碼添加爲文本,該圖片可能會在一段時間內脫機,這對未來的訪問者來說是無用的。 – timgeb

回答

2

dict將這些元組的迭代解釋爲鍵值對。所以你所要做的就是調用dictzip(headerrow, next_row)(僞代碼!)作爲你所有行的參數。

>>> header = ['key1', 'key2', 'key3'] 
>>> values = [['a', 'b', 'c'], ['d', 'e', 'f']] 
>>> dicts = [dict(zip(header, v)) for v in values] 
>>> dicts 
[{'key3': 'c', 'key2': 'b', 'key1': 'a'}, {'key3': 'f', 'key2': 'e', 'key1': 'd'}] 
0

您並未爲每個項目創建新的字典。將d = {}移至for item in rows:之後。

+0

非常感謝。 –

0

您需要創建行每個子表一個新的字典,併爲它下面的附加數據:

rows = [['Branden',27,'M'],['Casey',22,'F'],['Paul',30,'M']] 
header = ['Name','Age','Gender'] 
data = [] 
for sublist in rows: 
    d = {} #new dictionary per sublist 
    for i,element in enumerate(sublist): 
     # i is the iteration number, beginning with 0 
     d [header[i]] = element 
    data.append(d) 
print (data) 

打印(一行):

[{'Gender': 'M', 'Age': 27, 'Name': 'Branden'}, 
{'Gender': 'F', 'Age': 22, 'Name': 'Casey'}, 
{'Gender': 'M', 'Age': 30, 'Name': 'Paul'}] 
+0

非常感謝! –