在Python中迭代任意分层字典的项

2024-04-16 08:30:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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

现在,如果我们添加一个层,循环如下:

^{pr2}$

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

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

另外,我想知道整数在dict中是如何映射的


Tags: theinfor字典isvalueitemsval
2条回答

我可能不太了解你想要什么,但这会得到最后一层的所有值:

def get_values(my_dict):
    sub_vals = []
    actual_vals = []
    for val in my_dict.values():
        try:
            sub_vals += get_values(val)
        except AttributeError:
            actual_vals += [val]
    return sub_vals + actual_vals

最好使用递归来解决:

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

用法示例:

^{pr2}$

如果还希望跟踪关键点:

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)]

相关问题 更多 >