Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python中的Json嵌套键获取唯一列表_Python - Fatal编程技术网

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

从python中的Json嵌套键获取唯一列表,python,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'],

这是我的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']
我会告诉你我到目前为止所做的步骤

  • 获取dict的所有密钥,即

    格言钥匙

  • 逐个迭代键以获取父键的每个键

  • 迭代子标题键并获取子标题键的所有子键


  • 现在我不知道如何在python中将这个子键存储到一个唯一的集合?我怎样才能找到唯一的列表?我可以对列表进行排序吗?

    假设您希望结果不排序,迭代3个级别,并在第三个级别上使用键的数量:

    print(set(k for outer in d.values() for inner in outer.values() for k in inner))
    # {'birds', 'books', 'animals', 'bottles'}
    
    如果需要列表,请换行:

    如果要获得排序列表,请换行:

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

    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
    不是一个好主意,因为它会隐藏内置函数

    假设您希望结果无序,则迭代3个级别,并在第三个级别上获取键的数量:

    print(set(k for outer in d.values() for inner in outer.values() for k in inner))
    # {'birds', 'books', 'animals', 'bottles'}
    
    如果需要列表,请换行:

    如果要获得排序列表,请换行:

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

    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
    不是一个好主意,因为它会隐藏内置函数

    可以使用
    设置
    。比如:

    res = set()
    for v in dict.values():
        for i in v.values():
            res.update(set(i.keys()))
    
    print(res) # {'birds', 'animals', 'books', 'bottles'}
    
    就个人而言


    我发现这种语法比理解语法更容易阅读。她让你随波逐流,很容易找到突破点,明白你在做什么

    可以使用
    设置
    。比如:

    res = set()
    for v in dict.values():
        for i in v.values():
            res.update(set(i.keys()))
    
    print(res) # {'birds', 'animals', 'books', 'bottles'}
    
    就个人而言

    我发现这种语法比理解语法更容易阅读。她让你随波逐流,很容易找到突破点,明白你在做什么

    只需使用
    set()
    。添加(新项目)
    到它只需使用
    set()
    。添加(新项目)