要访问嵌套词典中的更高级列表项?

时间:2020-05-18 13:40:45

标签: python dictionary slice

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

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字典中的键,lvl2中的IonX,lvl3中的IonX(第二实例),然后我们有一个保存某些值的列表类型对象我想在函数中使用。

现在,如果这些都是列表,并且我想将所有值用于某个IonX-IonX组合(按该顺序),我可以用function(data[:][:]["Ion1"]["Ion2"])对其进行切片吗?

无论哪种方式,我现在搜索了很长时间,但并没有真正找到我认为可以解决同一问题的问题...

如何最好地使用字典结构?

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

我现在真的不知道如何使用列表理解来实现我的目标,但是我想我可以弄清楚一些东西,尽管结果可能很难看。

我实际上没有使用生成器和yield的经验,尽管似乎可以帮上忙。如果您建议采用这种方法,请您详细解释。

提前谢谢大家。希望你们能在这里帮助我。真的卡住了。

干杯,BUFU

1 个答案:

答案 0 :(得分:0)

这是一种循环遍历值列表并打印出来的方法,但是熊猫在速度和可读性方面可能更有效,如@ 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)