2016-08-30 6 views
3

Ich habe den folgenden Code, der gerade die Werte des ursprünglichen Wörterbuchs ausdruckt. Ich möchte jedoch jede Taste des verschachtelten Wörterbuchs durchlaufen, um zunächst nur die Namen zu drucken. Bitte beachten Sie meinen Code untenErhalte alle Schlüssel eines verschachtelten Wörterbuchs

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) 
+0

Wollen Sie nur die tiefste Taste, Wert-Paare gedruckt werden, dh die Völker Namen und deren entsprechende Zahl oder auch diesen Schlüssel, Wertpaar zum Beispiel: ''Keepers', {'Loris Karius': 1, 'Simon Mignolet': 2, 'Alex Manninger': 3}' – timakro

+0

Kann der verschachtelte Baum sein tiefer als dein Beispiel? – timakro

+0

Sie können die Verständnisliste verwenden: names = [Name für Spieler in Liverpool.values ​​() für Name in player.keys()] – Monica

Antwort

8

Hier Code ist, dass alle Teammitglieder drucken würde:

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

So Sie iterieren nur jedes innere Wörterbuch eins nach dem anderen und Druckwerte

UPDATE: Ziffernbedruckung keine Namen auf den ersten

+0

Danke, ich hätte das wirklich selbst herausfinden sollen. – Krishn

1
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()) 

Ausbeuten:

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

In anderen Antworten wurden Sie darauf hingewiesen, wie Sie Ihre Aufgabe für gegebene Dicts lösen können, wobei die maximale Tiefe gleich zwei ist. Hier ist das Programm, das Sie eine Schleife durch Schlüssel-Wert-Paar eines dict mit unbegrenzter Anzahl von Verschachtelungen (allgemeineren Ansatz) alows wird:

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) 

Drucke

1 2 
3 4 
5 6 

Das heißt relevant, wenn Sie nur an Schlüssel-Wert-Paar auf tiefster Ebene interessiert sind (wenn Wert nicht dict ist). Wenn auch Sie Interesse an Schlüssel-Wert-Paare sind in dem Wert dict ist, machen einen kleinen edit:

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) 

Drucke

a {1: {1: 2, 3: 4}, 2: {5: 6}} 
1 {1: 2, 3: 4} 
1 2 
3 4 
2 {5: 6} 
5 6 
+0

Wie würden Sie das schreiben, ohne 'yield from' zu verwenden? Seit ich Python 2.7 benutze. –

+0

Dies behandelt nicht den Fall, in dem sich das Wörterbuch in einer Liste befindet – amirouche

Verwandte Themen