簡體   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