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.

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.

  • Wie man einen String analysiert und ein verschachteltes Array zurückgibt?
  • Unendlich verschachteltes Wörterbuch in Python
  • Dynamische verschachtelte Wörterbücher
  • Sortierung eines verschachtelten Wörterbuchs mit Listen in Python
  • Zählen der Anzahl der Siege für Teams in einer verschachtelten Liste
  • Erstellen komplexer verschachtelter Wörterbücher aus Pandas DataFrame
  • So initialisieren Sie verschachtelte Wörterbücher in Python
  • Mehrere Ebenen von 'collection.defaultdict' in Python
  • Python Store Slice Index als Objekt
  • Python: Wie passiert man verschachtelte Klammern mit Regex?
  • Unerwartete Datenzuweisung in Python verschachtelten Wörterbüchern
  • Python ist die beste Programmiersprache der Welt.