【问题标题】:Nested For Loops, Unable to store Iterations without Catch 22嵌套的 For 循环,无法在没有 Catch 22 的情况下存储迭代
【发布时间】:2025-12-22 02:55:07
【问题描述】:

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

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中解决这种困难有哪些常规方法?

【问题讨论】:

    标签: python python-3.x loops


    【解决方案1】:

    您需要在外部 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)
    

    【讨论】:

      【解决方案2】:
      master_list = [{key: l[i] for i, key in enumerate(['x1','x2','y1','y2','id'])} for l in multi_list]
      

      试试上面的代码sn-p,希望对你有帮助

      【讨论】:

        【解决方案3】:

        在 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'] 中的每个子列表所做的事情。

        因此,我们在这里从['x1','x2','y1','y2','id'] 的组合序列和multi_list 中的每个子列表的子列表中创建一个字典。

        【讨论】:

        • 我想我下次使用这类数据结构时会考虑这种方法。现在我必须在这个 for 循环环境中工作,但还是谢谢大家,这真的很简洁!
        最近更新 更多