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.

  • Anwenden von Funktionen auf Werte von Wörterbüchern
  • Python - mysqlDB, sqlite Ergebnis als Wörterbuch
  • Geben Sie den Wert eines Strings als Variablennamen ein
  • Python: Erstellen Sie Wörterbuch aus Text / Datei, die im Wörterbuch Format ist
  • Zusammenführen von beliebig verschachtelten Wörterbüchern, Beibehalten von Schlüsseln und Einfügen von Ergebnissen mit demselben Schlüssel in einer Liste in Python
  • Den höchsten Schlüssel finden
  • Schlüssel und Werte des ursprünglichen Wörterbuchs umkehren
  • Inkonsistentes Verhalten zwischen dict.items und dict.values
  • 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.