我有一个字典列表,用于我的字典的'keys'和一个嵌套列表,我想用它作为'values',我想返回一个字典列表。但是当我遍历嵌套列表和标题列表并将字典附加到列表时,我只得到最后一个字典。 我在这里做错了什么?
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'}]
我在这里做错了什么?
答案 0 :(得分:2)
dict
将可迭代的元组解释为键值对。所以你要做的就是用dict
(伪代码!)作为所有行的参数调用zip(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'}]
答案 1 :(得分:0)
您没有为每个项目创建新的词典。将d = {}
移到第for item in rows:
行之后。
答案 2 :(得分:0)
您需要在行中为每个子列表创建一个新字典,并将其附加到数据,如下所示:
int i = c.getInt(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)