Tauschen Schlüssel-Wert-Paaren in ein dictionary
Ich bin auf der Suche nach Möglichkeiten, um swap-alle Schlüssel-Wert-Paare eines gegebenen Wörterbuchs.
So weit ich denken konnte, einen Weg, es zu tun:
Ex:
>>>a = { 0: 'a', 1 : 'b', 2 : 'c' }
>>> {value : key for key,value in a.items()}
{'a': 0, 'b': 1, 'c' : 2}
Aber für diese müsste ich mit extra Raum für die Erklärung einem anderen Wörterbuch.
Ich würde gerne wissen, welche Methoden könnte ich verwenden, tauschen Sie die Schlüssel-Wert-paar mehr Speicherplatz-Effizienz.
- was ist, wenn zwei Werte wiederholen oder Sie haben einen Wert, der nicht hashable?
- Gut, wenn zwei (oder mehr) Tasten den gleichen Wert haben, dann überschreiben wäre die einzige Möglichkeit. Ich, denke !
- Ich hatte nicht gedacht, das unhashable Wert Szenario ! Jeder Vorschlag helfen würde
- Gut, dass ist ziemlich wichtig, ich denke entweder ein Fehler ausgelöst werden soll, oder verwenden Sie eine defaultdict und erstellen Sie eine Liste der Werte für die Tasten wiederholt, aber dann müsste man gemischte Typen als Werte.
- aber wieder, ich wäre mit Extraplatz
- Ich denke, Daten zu verlieren, wäre etwas würde ich mehr sorgen machen
- Was ist der eigentliche Grund, den Sie umkehren möchten Sie die Zuordnungen?
- Ich war der Lösung eines Problems und ich denke, dass der Austausch der Schlüssel-Wert-paar wäre ein besserer Ansatz
- nicht, wenn Sie Daten verlieren, es wird nicht sein, was war die ursprüngliche dict tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da ein Wörterbuch ist im wesentlichen eine lookup-Tabelle, es ist eine konkrete Art und Weise ist es layed out in Erinnerung; die keys sind verteilt und effizient zeigen, um Werte, die sich—selbst—haben keine Besondere Bedeutung. Also, wenn Sie wollen, um reverse-mapping, können Sie nicht wirklich nutzen Sie die vorhandene Struktur; stattdessen müssen Sie erstellen neue Wörterbuch-Einträgen von Grund auf. Wörterbuch Verständnis Sie haben in Ihrer Frage ist eine gute und klare Weise, das zu tun.
Was Sie könnte tun, allerdings ist eine Wiederverwendung Wörterbuch, die Sie bereits haben und fügen Sie die neuen Schlüssel da sind (beim entfernen der alten):
Dadurch ändert sich der gleiche Wörterbuch, so wird es nicht haben (wahrscheinlich wenig) Aufwand ein neues Wörterbuch. Beachten Sie, dass hier davon ausgegangen, dass alle Werte eindeutig sind, sodass die Zuordnung genau Umgekehrt, und dass die Schlüssel und Werte nicht teilen gemeinsame Werte. Ansonsten läuft man in die Wörterbuch-Größe geändert, Ausnahmen oder fehlende Werte. Sie können verhindern, dass die ehemaligen durch das erstellen einer Kopie des dictionary-keys (obwohl dies bedeutet, dass Sie eine Liste zu speichern jetzt auch):
Einen abschließenden Hinweis: Es ist möglich, dass die änderung den Wörterbuch mehrere Male wie vielleicht einige Neuzuordnung Nebenwirkungen aber (zur Erhöhung der hash-Tabelle Größe etc.), aber es ist möglich, die Umsetzung detail von CPython (und ich bin mir nicht sicher).
a = {1:1, 2:3, 3:2}
?Versuchen, diesen code. Es löscht das Element in das Wörterbuch, bevor die Umkehrung Schlüssel und Wert.
Vermeiden Sie das überschreiben spezieller Fälle, dass @DSM Punkte in @poke Antwort, ich empfehlen immer die Verwendung eines zweiten Wörterbuchs. Die Leistung ist identisch.