2012-11-20 9 views
10

Beispiel:Konvertieren eines Wörterbuch in eine Liste

something = { 
    "1": { 
     "2": { 
      "3": { 
       "4": {}, 
       "5": {}, 
       "7": {}, 
       }, 
      "8": { 
       "9": {}, 
       "10": {} 
      }, 
      "11": { 
       "12": { 
        "13": { 
         "14": { 
          "15": { 
           "16": { 
            "17": { 
             "18": {} 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

Ich versuche, dieses Wörterbuch zu konvertieren, um eine Liste der Elemente wie folgt aus:

['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18'] 

Welche Methode soll ich verwenden?

Ich habe bereits versucht something.items(), aber was ich bekam, war zurück:

[('1', {'2': {'11': {'12': {'13': {'14': {'15': {'16': {'17': {'18': {}}}}}}}}, '8': {'9': {}, '10': {}}, '3': {'5': {}, '4': {}, '7': {}}}})] 

diesen Beitrag hier mein erstes Mal ist, also wenn ich mich etwas falsch gemacht haben, informieren Sie wissen.

Vielen Dank und Entschuldigung für die seltsame Post.

+1

Sie möchten also eine * sortierte * Liste aus den Schlüsseln einer Anzahl von verschachtelten Wörterbüchern, wobei alle Duplikate im Prozess verworfen werden. Ist das ungefähr? – 0xC0000022L

Antwort

6
something = {'1': {'2': {'11': {'12': {'13': {'14': {'15': {'16': {'17': {'18': {}}}}}}}}, '3': {'4': {}, '5': {}, '7': {}}, '8': {'10': {}, '9': {}}}}} 
a = [] 

def flatten(d,a): 
    for k,v in d.items(): 
     a.append(k) 
     flatten(v, a) 
flatten(something, a) 

# a == ['1', '2', '11', '12', '13', '14', '15', '16', '17', '18', '8', '9', '10', '3', '5', '4', '7']" 
24

Sie müssen eine Funktion benutzen, um Ihre Struktur zu glätten:

def flatten(d): 
    for key, value in d.iteritems(): 
     yield key 
     for sub in flatten(value): 
      yield sub 

(Die .iteritems() sollte mit .items() ersetzt werden, wenn Sie Python verwenden 3).

auf Python 3.3 und neuere, können Sie auch die neue yield from syntax verwenden:

def flatten(d): 
    for key, value in d.items(): 
     yield key 
     yield from flatten(value) 

Dies wird alle Schlüssel rekursiv ergeben. So schalten Sie das in eine Liste Verwendung:

list(flatten(elements)) 

Da Python-Dictionaries ungeordnete sind, die Reihenfolge der zurückgegebenen Schlüssel nicht sortiert gehen werden. Sie müssen das Ergebnis explizit sortieren, wenn Ihre Schlüssel eine bestimmte Reihenfolge haben sollen.

+0

+1, 'Ausbeute' macht die Funktion schlanker. – eumiro

+0

Vielen Dank, es hat funktioniert. – Neox

Verwandte Themen