Holen Sie sich eine Liste aller Schlüssel in verschachtelten Wörterbuch

Ich möchte eine Liste aller Schlüssel in einem verschachtelten Wörterbuch erhalten, das Listen und Wörterbücher enthält.

Ich habe derzeit diesen Code, aber es scheint zu fehlen Hinzufügen einige Schlüssel zur Liste und auch Duplikat fügt einige Tasten.

keys_list = [] def get_keys(d_or_l, keys_list): if isinstance(d_or_l, dict): for k, v in iter(sorted(d_or_l.iteritems())): if isinstance(v, list): get_keys(v, keys_list) elif isinstance(v, dict): get_keys(v, keys_list) else: keys_list.append(k) elif isinstance(d_or_l, list): for i in d_or_l: if isinstance(i, list): get_keys(i, keys_list) elif isinstance(i, dict): get_keys(i, keys_list) else: print "** Skipping item of type: {}".format(type(d_or_l)) return keys_list 

Das macht einfach eine leere Liste und füllt sie mit den Schlüsseln. D_or_l ist eine Variable und nimmt das Original dict, um es zu vergleichen.

  • Split nur Teil der Liste in Python
  • Was ist ein Mapping-Objekt, nach Dict-Typ?
  • Mit Python kann ich ein hartnäckiges Wörterbuch behalten und es ändern?
  • Zeilen und Spalten HTML-TABELLE (JSON RESPONSE)
  • Python-Liste der Dicts, Maximalwertindex erhalten
  • Matchliste Werte zu dict und return Schlüssel / Wert Paare in neue dict
  • Wie benutzt man einen Punkt ".", Um auf Mitglieder des Wörterbuchs zuzugreifen?
  • Kombinieren und Zuordnen mehrerer Wörterbücher
  • 2 Solutions collect form web for “Holen Sie sich eine Liste aller Schlüssel in verschachtelten Wörterbuch”

    Das sollte der Job machen:

     def get_keys(dl, keys_list): if isinstance(dl, dict): keys_list += dl.keys() map(lambda x: get_keys(x, keys_list), dl.values()) elif isinstance(dl, list): map(lambda x: get_keys(x, keys_list), dl) 

    Um Duplikate zu vermeiden, kannst du Set verwenden, zB:

     keys_list = list( set( keys_list ) ) 

    Beispiel Testfall:

     keys_list = [] d = {1: 2, 3: 4, 5: [{7: {9: 1}}]} get_keys(d, keys_list) print keys_list >>>> [1, 3, 5, 7, 9] 

    Wie es steht, ignoriert dein Code Schlüssel, die zur list oder Werte dict . Entfernen Sie den else Block in Ihrem ersten for Schleife, möchten Sie den Schlüssel hinzufügen, egal was der Wert ist.

     keys_list = [] def get_keys(d_or_l, keys_list): if isinstance(d_or_l, dict): for k, v in iter(sorted(d_or_l.iteritems())): if isinstance(v, list): get_keys(v, keys_list) elif isinstance(v, dict): get_keys(v, keys_list) keys_list.append(k) # Altered line elif isinstance(d_or_l, list): for i in d_or_l: if isinstance(i, list): get_keys(i, keys_list) elif isinstance(i, dict): get_keys(i, keys_list) else: print "** Skipping item of type: {}".format(type(d_or_l)) return keys_list 

    get_keys({1: 2, 3: 4, 5: [{7: {9: 1}}]}, keys_list) gibt [1, 3, 9, 7, 5]

    Um eine Vervielfältigung zu vermeiden, können Sie statt einer list einen set Datentyp verwenden.

    Python ist die beste Programmiersprache der Welt.