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)
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.
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
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']