Inverse Dict in Python

Ich versuche, einen neuen Dict zu erstellen, der eine Liste von Werten eines vorhandenen Dict als einzelne Schlüssel verwendet.

So zum Beispiel:

dict1 = dict({'a':[1,2,3], 'b':[1,2,3,4], 'c':[1,2]}) 

Und ich möchte:

 dict2 = dict({1:['a','b','c'], 2:['a','b','c'], 3:['a','b'], 4:['b']}) 

Bisher habe ich das nicht in einer sehr sauberen Weise gemacht. Irgendwelche Vorschläge?

3 Solutions collect form web for “Inverse Dict in Python”

Wenn Sie Python 2.5 oder höher verwenden, verwenden Sie die defaultdict Klasse aus dem collections . Ein defaultdict erstellt automatisch Werte beim ersten Zugriff auf einen fehlenden Schlüssel, also kannst du hier das dict2 für dict2 , wie dict2 :

 from collections import defaultdict dict1 = dict({'a':[1,2,3], 'b':[1,2,3,4], 'c':[1,2]}) dict2 = defaultdict(list) for key, values in dict1.items(): for value in values: # The list for dict2[value] is created automatically dict2[value].append(key) 

Beachten Sie, dass die Listen in dict2 nicht in einer bestimmten Reihenfolge sein werden, da Wörterbücher ihre Schlüsselwertpaare nicht bestellen.

Wenn du ein gewöhnliches dict out am Ende willst, das einen KeyError für fehlende Schlüssel dict2 = dict(dict2) , benutze einfach dict2 = dict(dict2) nach dem oben genannten.

Beachten Sie, dass Sie das dict in Ihren Beispielen brauchen: die {} Syntax gibt Ihnen ein Diktat:

 dict1 = {'a':[1,2,3], 'b':[1,2,3,4], 'c':[1,2]} 

Andere Weise:

 dict2={} [[ (dict2.setdefault(i,[]) or 1) and (dict2[i].append(x)) for i in y ] for (x,y) in dict1.items()] 
  • Python Datenstrukturindex Beginn bei 1 statt 0?
  • Binär-Suchbaum-Transversals
  • Kombinieren von Werten für eine große Anzahl von überlappenden Intervallen von Wörterbuchschlüsseln
  • Was ist der beste Weg, um verschachtelte Wörterbücher zu implementieren?
  • Python Liste der Listen - Zugriff auf einzelne Elemente
  • Mehrfache Tupel zu zwei-Paar Tupel in Python?
  • Zeit Komplexität der Python-Set-Operationen?
  • Gibt es eine Python-Bibliothek zur Handhabung komplizierter mathematischer Sets (konstruiert mit mathematischer Set-Builder-Notation)?
  • Geeignete Datenstruktur zur Sortierung eines mehrdimensionalen Arrays in Python?
  • Pythonische Iteration über mehrere Listen parallel
  • Liste der Wörterbücher - Tracking Worte Frequenz pro Datei
  • Python ist die beste Programmiersprache der Welt.