一开始我有一个主列表,我打算把所有东西都放进去:
master_list = []
我有数据存储在嵌套列表中,如下所示:
multi_list = [[1,2,3,4,5],[6,7,8,9,10]]
最终结果需要将此数据转换为如下所示的字典列表:
master_list
>> [{'x1':1,'x2':2,'y1':3,'y2':4,'id':5},{'x1':6,'x2':7,'y1':8,'y2':9,'id':10}]
这就是我的最终目标。我实现这一目标的方法如下:
multi_list = [[1,2,3,4,5],[6,7,8,9,10]]
master_list = []
iterating_dict = {}
for n in multi_list:
for idx,i in enumerate(['x1','x2','y1','y2','id']):
iterating_dict[i] = n[idx]
master_list.append(iterating_dict)
master_list
>>[{'x1':6,'x2':7,'y1':8,'y2':9,'id':10},{'x1':6,'x2':7,'y1':8,'y2':9,'id':10}]
最终发生的事情是multi_list
中的第二项被存储两次。我希望它存储multi_list
中所有项目的转换词典。我相信这意味着append
不在循环的正确位置。但是,当我将其进一步放入循环中时,它不会附加到master_list
。我不能把append
放在外面,否则它就会超出范围。
python中,解决这种困难的一些传统方法是什么?
您需要在外部 for 循环的每次迭代上重置迭代字典。否则,它将不断积累值。
这样的事情应该有效:
for n in multi_list:
iterating_dict = {}
for idx,i in enumerate(['x1','x2','y1','y2','id']):
iterating_dict[i] = n[idx]
master_list.append(iterating_dict)
master_list = [{key: l[i] for i, key in enumerate(['x1','x2','y1','y2','id'])} for l in multi_list]
尝试上面的代码片段,希望这有帮助
在 python 中做到这一点的简洁方法是使用 zip
和列表理解。
multi_list = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
dict_keys = ['x1','x2','y1','y2','id']
master_list = [dict(zip(dict_keys, sublist)) for sublist in multi_list]
zip()
将两个序列组合在一起,dict()
将其转换为键值对。这就是您对multi_list
和['x1','x2','y1','y2','id']
中的每个子列表所做的。
所以在这里,我们为multi_list
中的每个子列表制作了['x1','x2','y1','y2','id']
和子列表的组合序列。