gpt4 book ai didi

python - 遍历 Python 中任意分层字典的项目

转载 作者:太空狗 更新时间:2023-10-30 02:43:20 27 4
gpt4 key购买 nike

我有一个 Python 字典,在迭代中增加层数

我想遍历最后一层中存在的值。

假设这个字典:

d = {'a':{'a':2},'b':{'c':2},'x':{'a':2}}
#the intuitive solution is
for key1,val in d.items():
for key2,val2 in val.items():
#integer value in val2, HOORAY

现在,如果我们添加一个层,循环将进行:

d = {'a':{'a':{'y':2}},'b':{'c':{'a':5}},'x':{'a':{'m':6}}}
#the intuitive solution is
for key1,val in d.items():
for key2,val2 in val.items():
for key3,val3 in val2.items():
#integer value in val3

我寻找任意维度迭代的动态解

如果有帮助,请考虑迭代中所有元素已知和固定的层数。

另外我想知道一个整数是如何映射到字典中的。

最佳答案

最好使用递归解决这个问题:

def iter_leafs(d):
for key, val in d.items():
if isinstance(val, dict):
yield from iter_leafs(val)
else:
yield val

示例用法:

>>> d = {'a':{'a':{'y':2}},'b':{'c':{'a':5}},'x':{'a':{'m':6}}}
>>> list(iter_leafs(d))
[6, 5, 2]

如果您还想跟踪 key :

def iter_leafs(d, keys=[]):
for key, val in d.items():
if isinstance(val, dict):
yield from iter_leafs(val, keys + [key])
else:
yield keys + [key], val

>>> list(iter_leafs(d))
[(['x', 'a', 'm'], 6), (['b', 'c', 'a'], 5), (['a', 'a', 'y'], 2)]

关于python - 遍历 Python 中任意分层字典的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33724342/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com