簡體   English   中英

如何在字典列表中迭代嵌套字典?

[英]How do I iterate through nested dictionaries in a list of dictionaries?

對Python來說還是新手,需要一些幫助。 我已經找到了一些用於迭代字典列表的答案,但不是針對字典列表中的嵌套字典。

這是字典列表中單個字典的粗略結構

[{ 'a':'1',
'b':'2',
'c':'3',
'd':{ 'ab':'12',
      'cd':'34',
      'ef':'56'},
'e':'4',
'f':'etc...'
}]



dict_list = [{ 'a':'1', 'b':'2', 'c':'3', 'd':{ 'ab':'12','cd':'34', 'ef':'56'}, 'e':'4', 'f':'etc...'}, { 'a':'2', 'b':'3', 'c':'4', 'd':{ 'ab':'23','cd':'45', 'ef':'67'}, 'e':'5', 'f':'etcx2...'},{},........,{}]

這或多或少是我所看到的,雖然有一些鍵列表作為值而不是字典,但我不認為我現在需要擔心它們,盡管可以捕獲它們的代碼會很棒。

到目前為止,我所做的就是迭代json並返回每個“高級”鍵的所有值。

import ujson as json

with open('test.json', 'r') as f:
    json_text = f.read()

dict_list = json.loads(json_text)

for dic in dict_list:
    for val in dic.values():
        print(val)

這是該循環運行時返回的第一組值

1
2
3
{'ab':'12','cd':'34','ef':'56'}
4
etc...

我需要能夠從頂層選擇特定值並更深入一級並在該嵌套字典中獲取特定值並將它們附加到列表中。 我確定我錯過了一個簡單的解決方案。 也許我在看多個循環?

如何使用isinstance檢查實例類型(當然只適用於更深層次)。 可能不是最好的方式

for dic in dict_list:
    for val in dic.values():
        if not isinstance(val, dict):
            print(val)
        else:    
            for val2 in val.values():
                print (val2)

# 1
# 2
# 3
# 12
# 34
# 56
# 4
# etc...
# 2
# 3

遵循Python鼓勵的ducktype風格,只是猜測所有內容都有一個.values成員,如果不這樣做就抓住它:

import ujson as json

with open('test.json', 'r') as f:
    json_text = f.read()

dict_list = json.loads(json_text)

for dic in dict_list:
    for val in dic.values():
        try:
            for l2_val in val.values():
                print(l2_val)
        except AttributeError:
            print(val)

如果預期內部詞典很少, Bazingaa的解決方案會更快。

當然,任何更“深”,你可能需要一些遞歸:

def print_dict(d):
    for val in d.values():
       try:
           print_dict(val)
        except AttributeError:
           print(val)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM