我有一个由嵌套字典和列表组成的数据结构。
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
这是在值列表上循环并打印出来的方法,但可能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)