将作为值存储在嵌套字典中的Python列表聚合到一个任意级别的列表中

时间:2018-07-19 15:35:15

标签: python dictionary nested

假设我有一个嵌套的字典,在某种程度上,终端值是列表。例如:

nested_dict = {1 : {'a' : [1,2,3], 'b' : [4,5]}, 
               2 : {'a' : [6],     'b' : [7,8,9]}}

我想将列表值聚合到[1,2,3,4,5,6,7,8,9]中。我有两个级别

values = []
for key1 in nested_dict.keys():
    for key2 in nested_dict[key1].keys():
        for value in nested_dict[key1][key2]:
            values.append(value)

如何使其更紧凑,并能够处理任意级别?也就是说,我知道所有列表都处于同一级别,但是我不知道它的深度,所以在我提供的代码中,我实际上需要不确定数量的for循环。

不是how to extract multi level dictionary keys/values in python的重复项,因为它们最多显示两个级别。

1 个答案:

答案 0 :(得分:3)

您可以使用递归:

nested_dict = {1 : {'a' :[1,2,3], 'b': [4,5]}, 2 : {'a' : [6], 'b' : [7,8,9]}}
def get_lists(d):
   r = [b if isinstance(b, list) else get_lists(b) for b in d.values()]
   return [i for b in r for i in b]

输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9]