web-dev-qa-db-ja.com

ネストされた辞書のすべてのキーを取得します。

現在、初期辞書の値を出力するだけのコードがあります。ただし、ネストされたディクショナリのすべてのキーを反復処理して、最初に名前を出力するだけです。私のコード下記をご参照ください。

Liverpool = {
    'Keepers':{'Loris Karius':1,'Simon Mignolet':2,'Alex Manninger':3},
    'Defenders':{'Nathaniel Clyne':3,'Dejan Lovren':4,'Joel Matip':5,'Alberto Moreno':6,'Ragnar Klavan':7,'Joe Gomez':8,'Mamadou Sakho':9}
}

for k,v in Liverpool.items():
    if k =='Defenders':
       print(v)
12
Krishn

すべてのチームメンバーを出力するコードを次に示します。

for k, v in Liverpool.items():
    for k1, v1 in v.items():
        print(k1)

したがって、すべての内部辞書を1つずつ繰り返し、値を出力します。

12
Nikolay Zinov

他の回答では、最大の深さレベルが2に等しい、特定の辞書のタスクを解決する方法が示されました。以下は、ネストレベルの数に制限のない辞書のキーと値のペアをループするプログラムです(より一般的なアプローチ)。

def recursive_items(dictionary):
    for key, value in dictionary.items():
        if type(value) is dict:
            yield from recursive_items(value)
        else:
            yield (key, value)

a = {'a': {1: {1: 2, 3: 4}, 2: {5: 6}}}

for key, value in recursive_items(a):
    print(key, value)

プリント

1 2
3 4
5 6

最も深いレベルのキーと値のペアのみに関心がある場合(値がdictでない場合)に関連します。値がdictであるキーと値のペアにも興味がある場合は、少し編集します。

def recursive_items(dictionary):
    for key, value in dictionary.items():
        if type(value) is dict:
            yield (key, value)
            yield from recursive_items(value)
        else:
            yield (key, value)

a = {'a': {1: {1: 2, 3: 4}, 2: {5: 6}}}

for key, value in recursive_items(a):
    print(key, value)

プリント

a {1: {1: 2, 3: 4}, 2: {5: 6}}
1 {1: 2, 3: 4}
1 2
3 4
2 {5: 6}
5 6
25
Dmitry Torba
Liverpool = {
    'Keepers':{'Loris Karius':1,'Simon Mignolet':2,'Alex Manninger':3},
    'Defenders':{'Nathaniel Clyne':3,'Dejan Lovren':4,'Joel Matip':5,'Alberto Moreno':6,'Ragnar Klavan':7,'Joe Gomez':8,'Mamadou Sakho':9}
}

for k,v in Liverpool.items():
    print(v.keys())

利回り:

['Alberto Moreno', 'Joe Gomez', 'Dejan Lovren', 'Ragnar Klavan', 'Joel Matip', 'Nathaniel Clyne', 'Mamadou Sakho']
['Alex Manninger', 'Loris Karius', 'Simon Mignolet']
1
Kevin London