web-dev-qa-db-fra.com

Obtenir toutes les clés d'un dictionnaire imbriqué

J'ai le code ci-dessous qui ne fait qu'imprimer les valeurs du dictionnaire initial. Cependant, je voudrais parcourir chaque clé du dictionnaire imbriqué pour simplement imprimer les noms. S'il vous plaît voir mon code ci-dessous:

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)
7
Krishn

Voici le code qui imprimerait tous les membres de l'équipe:

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

Il suffit donc d’itérer chaque dictionnaire intérieur un par un et d’imprimer les valeurs.

11
Nikolay Zinov

Dans d'autres réponses, on vous a montré comment résoudre votre tâche pour des dict donnés, avec un niveau de profondeur maximum égal à deux. Voici le programme qui vous permettra de parcourir la paire clé-valeur d'un dict avec un nombre illimité de niveaux d'imbrication (approche plus générique):

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)

Impressions

1 2
3 4
5 6

Cela est pertinent si vous ne vous intéressez qu'aux paires clé-valeur au niveau le plus profond (lorsque la valeur n'est pas dictée). Si vous êtes également intéressé par une paire clé-valeur où valeur est dict, effectuez une petite modification:

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)

Impressions

a {1: {1: 2, 3: 4}, 2: {5: 6}}
1 {1: 2, 3: 4}
1 2
3 4
2 {5: 6}
5 6
20
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())

Rendements:

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