2017-04-23 160 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

非常感谢! –