Schlüssel und Werte des ursprünglichen Wörterbuchs umkehren

Zum Beispiel nenne ich diese Funktion, indem ich ein Wörterbuch als Parameter übergibt:

>>> inv_map({'a':1, 'b':2, 'c':3, 'd':2}) {1: ['a'], 2: ['b', 'd'], 3: ['c']} >>> inv_map({'a':3, 'b':3, 'c':3}) {3: ['a', 'c', 'b']} >>> inv_map({'a':2, 'b':1, 'c':2, 'd':1}) {1: ['b', 'd'], 2: ['a', 'c']} 

Ob

 map = { 'a': 1, 'b':2 } 

Ich kann diese Karte nur umkehren, um zu bekommen:

 inv_map = { 1: 'a', 2: 'b' } 

Mit diesem

 dict((v,k) for k, v in map.iteritems()) 

Wer weiß, wie das für meinen Fall zu tun?

  • Rekursiver Zugang zu Wörterbuch und Modifikation
  • Zugriff auf Wörterbuchwert nach Index in Python
  • Split python Wörterbuch, um alle Kombinationen von Werten zu ergeben
  • Liste der Dicts Vergleich, um zwischen Listen zu entsprechen und Wertänderungen in Python zu erkennen
  • Extrahieren Sie einen Teil der Daten aus der JSON-Datei mit Python
  • Warum ist das __dict__ von Instanzen so klein in Python 3?
  • Python-Wörterbuch, wie man Schlüssel / Werte in der gleichen Reihenfolge wie deklariert halten?
  • Vergleich von zwei Wörterbüchern in Python
  • 3 Solutions collect form web for “Schlüssel und Werte des ursprünglichen Wörterbuchs umkehren”

    Sie können ein defaultdict mit Liste verwenden:

     >>> from collections import defaultdict >>> m = {'a': 2, 'b': 1, 'c': 2, 'd': 1} >>> dd = defaultdict(list) >>> for k, v in m.iteritems(): ... dd[v].append(k) ... >>> dict(dd) {1: ['b', 'd'], 2: ['a', 'c']} 

    Wenn es Ihnen egal ist, ob Sie ein dict oder defaultdict haben, können Sie den letzten Schritt auslassen und das defaultdict direkt verwenden.

    Sie können hier wahrscheinlich defaultdict oder setdefault .

     def invertDictionary(orig_dict): result = {} # or change to defaultdict(list) for k, v in orig_dict.iteritems(): result.setdefault(v, []).append(k) 

    EDIT In python 2.7:

     from itertools import groupby def inv_map(d): return {k : [i[0] for i in list(v)] for k, v in groupby(d.items(),lambda x:x[1])} print inv_map({'a':1, 'b':2, 'c':3, 'd':2}) print inv_map({'a':3, 'b':3, 'c':3}) print inv_map({'a':2, 'b':1, 'c':2, 'd':1}) 

    Ausgabe:

     {1: ['a'], 2: ['b', 'd'], 3: ['c']} {3: ['a', 'c', 'b']} {1: ['b', 'd'], 2: ['a', 'c']} 
    Python ist die beste Programmiersprache der Welt.