嵌套的循环,无法在没有 Catch 22 的情况下存储迭代



一开始我有一个主列表,我打算把所有东西都放进去:

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']和子列表的组合序列。

相关内容

最新更新