繁体   English   中英

从python中的Json嵌套键获取唯一列表

[英]Get Unique list from Json Nested Keys in python

这是我的示例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数据中获取所有子标头的Keys的唯一集合。我的结果应该是,

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

我将告诉我到目前为止的步骤,

  1. 获取所有的字典键。

    dict.keys()

  2. 逐个迭代键获取父键的每个键。

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

现在,我不知道如何将子键存储到python中的唯一集? 我该如何找到唯一列表? 我可以对清单进行排序吗?

假设您想要的结果是无序的 ,则对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()函数。

可以使用set 就像是:

res = set()
for v in dict.values():
    for i in v.values():
        res.update(set(i.keys()))

print(res) # {'birds', 'animals', 'books', 'bottles'}

就个人而言,

我发现此语法比理解语法更易读。 她跟随你的流程,可以轻松地提出一个断点并了解你在做什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM