首页 > 解决方案 > 从python中的Json嵌套键获取唯一列表

问题描述

这是我的示例 Json 数据。

dict = {'Headers 1': {'sub head 1': { 'birds':['Item 1.1.1',
                                          'Item 1.1.2',
                                          'Item 1.1.3',
                                          'Item 1.1.4'],
                                'animals':['Item 1.1.1',
                                          'Item 1.1.2',
                                          'Item 1.1.3',
                                          'Item 1.1.4']
                                },

               'sub head 2': { 'birds':['Item 1.1.1',
                                          'Item 1.1.2',
                                          'Item 1.1.3',
                                          'Item 1.1.4'],
                                'books':['Item 1.1.1',
                                          'Item 1.1.2',
                                          'Item 1.1.3',
                                          'Item 1.1.4']
                                },
                },
 'Headers 2': {'sub head 1': { 'bottles':['Item 1.1.1',
                                          'Item 1.1.2',
                                          'Item 1.1.3',
                                          'Item 1.1.4'],
                                'animals':['Item 1.1.1',
                                          'Item 1.1.2',
                                          'Item 1.1.3',
                                          'Item 1.1.4']
                                },
               'sub head 2': { 'books':['Item 1.1.1',
                                          'Item 1.1.2',
                                          'Item 1.1.3',
                                          'Item 1.1.4'],
                                'birds':['Item 1.1.1',
                                          'Item 1.1.2',
                                          'Item 1.1.3',
                                          'Item 1.1.4']
                                }
               },
 'Headers 3': {'sub head 1': { 'bottles':['Item 1.1.1',
                                          'Item 1.1.2',
                                          'Item 1.1.3',
                                          'Item 1.1.4'],
                                'birds':['Item 1.1.1',
                                          'Item 1.1.2',
                                          'Item 1.1.3',
                                          'Item 1.1.4']
                                }
                }
 }

从这个 Json 数据中,我想获取子标题的所有键的唯一集。我的结果应该是,

['animals','birds','books','bottles']

我会告诉我到目前为止我已经完成的步骤,

  1. 获取 dict 的所有密钥。IE

    dict.keys()

  2. 逐个迭代键得到父键的每个键。

  3. 迭代子标题键并获取子标题键的所有子键。

现在我不知道如何将这个子键存储到 python 中的唯一集合中?我怎么能得到那个唯一的列表?我可以把列表排序吗?

标签: python

解决方案


假设您想要结果unordered,迭代 3 层深度并set()在第三层获取键:

print(set(k for outer in d.values() for inner in outer.values() for k in inner))
# {'birds', 'books', 'animals', 'bottles'}

如果您想要一个列表,请换行list()

print(list(set(k for outer in d.values() for inner in outer.values() for k in inner)))
# ['birds', 'books', 'bottles', 'animals']

如果您想要一个排序列表,请换行sorted()

print(sorted(set(k for outer in d.values() for inner in outer.values() for k in inner)))
# ['animals', 'birds', 'books', 'bottles']

如果您想要一个有序的结果,请保留一个可见集以跟踪重复项并将结果存储在列表中:

seen = set()
result = []

for outer in d.values():
    for inner in outer.values():
        for k in inner:
            if k not in seen:
                seen.add(k)
                result.append(k)

print(result)
# ['birds', 'animals', 'books', 'bottles']

以上也不关心前两个级别的键,因此您可以迭代字典values()

注意:命名变量dict不是一个好主意,因为它会影响内置dict()函数。


推荐阅读