在嵌套字典里面访问更深层次的列表项?

问题描述 投票:0回答:1

我有一个由嵌套字典和列表组成的数据结构。

System1 -- Charge1 -- Ion1 -- Ion2 -- List of Values
        -- Charge2 -- Ion1 -- Ion2 -- List of Values
        -- Charge2 -- Ion2 -- Ion4 -- List of Values
        -- Charge2 -- Ion3 -- Ion4 -- List of Values
System2 -- Charge1 -- Ion1 -- Ion2 -- List of Values
... and so on

SystemX是最高级(0级)字典中的键,ChargeX是1级字典中的键,IonX在lvl2中,IonX(第二实例)在lvl3中,然后我们有一个列表类型的对象,它保存了我想在一个函数中使用的某些值。

现在,如果这些都是列表,而我想使用某个IonX-IonX组合的所有值(按这个顺序),我是否可以用以下方法来切分它 function(data[:][:]["Ion1"]["Ion2"])?

不管是哪种方式,我找了好久,都没能真正找到我觉得解决同样问题的问题......

我如何使用我的字典结构最好地前进?

遍历每个字典中的所有键,直到达到所需的级别,然后返回所有的值列表(如果存在的话)到一个新的字典列表中,这是一个好主意吗?这是最简单、最优雅甚至是最pythonic的方式吗?我真的不相信是这样的。

我现在真的不知道如何使用列表理解来实现我的目标,但我想我可以想出一些办法,尽管它可能会变得很丑陋。

我几乎没有使用生成器和 yield,尽管这似乎会有帮助。如果您提出这样的方法,请您详细解释一下。

先谢谢大家了。希望你们能在这里帮助我。真的很卡。

干杯,BUFU

python dictionary slice
1个回答
0
投票

这是在值列表上循环并打印出来的方法,但可能pandas在速度和可读性方面更有效,正如评论中@ 0x5453所建议的那样......

data = {
    "System1": {"Charge1": {"Ion1": [1, 2, 3, 4, 5],
                            "Ion2": [6, 7, 8, 9, 10]
                            },
                "Charge2": {"Ion1": [11, 12, 13, 14, 15],
                            "Ion2": [16,17, 18, 19, 20]
                            },
                },
    "System2": {"Charge1": {"Ion1": [1, 2, 3, 4, 5],
                            "Ion2": [6, 7, 8, 9, 10]
                            },
                "Charge2": {"Ion1": [11, 12, 13, 14, 15],
                            "Ion2": [16,17, 18, 19, 20]
                            }
                }
}


def simple_function(data):
    for systems in data.keys():
        for charges in data[str(systems)]:
            for ions in data[str(systems)][str(charges)]:
                for value_lists in data[str(systems)][str(charges)][str(ions)]:
                    print(f"{value_lists = }")


simple_function(data)
© www.soinside.com 2019 - 2024. All rights reserved.