Wie man ein Dictionary in Python umkehrt

Rayven Esplanada 30 Januar 2023
  1. Verwenden Sie items(), um ein Dictionary in Python umzukehren
  2. Verwenden Sie collections.defaultdict(), um ein Dictionary in Python umzukehren
Wie man ein Dictionary in Python umkehrt

Dieser Artikel demonstriert verschiedene Methoden zum Invertieren eines Dictionaries in Python.

Die Umkehrung eines Dictionaries unterscheidet sich von der Umkehrung einer Liste, d.h. es bedeutet, die Schlüssel- und Wertelemente des Dictionaries zu invertieren oder zu vertauschen, d.h. sie im Wesentlichen für welchen Zweck auch immer der Entwickler sie verwenden mag, zu vertauschen.

Verwenden Sie items(), um ein Dictionary in Python umzukehren

Python-Wörterbücher haben eine eingebaute Funktion namens items(), die ein iterierbares Objekt zurückgibt, das die Schlüssel-Werte-Paare der Wörterbücher in Form eines Tupels anzeigt.

Deklarieren Sie zum Beispiel ein Dictionary mit zufälligen Kategorien und drucken Sie es mit items() aus.

dct = {
    "Animal": "Dog",
    "Fruit": "Pear",
    "Vegetable": "Cabbage",
    "Tree": "Maple",
    "Flower": "Daisy",
}

print(dct.items())

Ausgabe:

dict_items([('Animal', 'Dog'), ('Fruit', 'Pear'), ('Vegetable', 'Cabbage'), ('Tree', 'Maple'), ('Flower', 'Daisy')])

Das Drucken eines Dictionaries mit items() gibt eine iterierbare Liste von Tupelwerten aus, die wir mit der for-Schleife für Wörterbücher manipulieren können.

Kehren Sie die Schlüssel-Werte-Paare um, indem Sie das Ergebnis von items() in eine Schleife schicken und den Schlüssel und den Wert wechseln.

dct = {v: k for k, v in dct.items()}
print(dct)

Das k und v in der for-Schleife steht für Schlüssel bzw. Wert. v: k sind die Platzhalter für den Schlüssel und den Wert in jeder Iteration, obwohl wir den vorherigen Wert v als neuen Schlüssel und den vorherigen Schlüssel k als neuen Wert setzen.

Ausgabe:

{'Dog': 'Animal', 'Pear': 'Fruit', 'Cabbage': 'Vegetable', 'Maple': 'Tree', 'Daisy': 'Flower'}

Die Elemente Schlüssel und Wert sind nun in der Ausgabe vertauscht.

Gleiche Schlüssel in einem umgekehrten Dictionary

Ein weiteres Beispielszenario beim Invertieren eines Dictionaries ist, wenn es mehrere Schlüssel oder Werte mit dem gleichen Wert gibt. Dies ist ein wahrscheinlicheres Szenario zum Invertieren eines Dictionaries.

Zum Beispiel ein Dictionary mit den Lieblingstieren der Menschen.

favAnimal = {
    "John": "Dog",
    "Jane": "Cat",
    "Jerome": "Lion",
    "Jenny": "Dog",
    "Jared": "Giraffe",
    "James": "Dog",
}

Wenn das Dictionary unter Verwendung des obigen Codes invertiert wird, wäre die Ausgabe nicht so, wie Sie es erwarten würden.

favAnimal = {v: k for k, v in favAnimal.items()}
print(favAnimal)

Ausgabe:

{'Dog': 'James', 'Cat': 'Jane', 'Lion': 'Jerome', 'Giraffe': 'Jared'}

Hier fehlen 2 Elemente aus dem ursprünglichen Dictionary, weil jedes Mal, wenn sich ein Schlüssel oder ein Wert in der Schleife wiederholt, der vorhandene Datensatz überschrieben wird.

Das Dictionary enthält 3 Personen mit dem Wertepaar Dog, aber nur James wurde kopiert, weil dies der letzte Datensatz mit dem Wert von Dog war und die 2 anderen Dictionaryeinträge überschrieben hat.

Um dieses Problem zu lösen, müssten wir die Werte in einer Liste speichern, so dass sie einem einzigen Schlüssel zugeordnet werden könnten.

Der vollständige Beispielcode:

favAnimal = {
    "John": "Dog",
    "Jane": "Cat",
    "Jerome": "Lion",
    "Jenny": "Dog",
    "Jared": "Giraffe",
    "James": "Dog",
}

favAnimal = {v: k for k, v in favAnimal.items()}

print(favAnimal)

Verwenden Sie collections.defaultdict(), um ein Dictionary in Python umzukehren

Das Modul collections hat eine Funktion defaultdict(), die die Werte in einem Dictionary in Python manipulieren kann.

defaultdict() wird hauptsächlich zur Erzeugung von Vorgabewerten von nicht existierenden Schlüsseln verwendet. Wenn Sie auf einen nicht existierenden Schlüssel zugreifen, kann er für diesen einen Vorgabewert deklarieren, selbst wenn er nicht existiert.

Diese Funktion ist für unseren Fall nützlich, weil wir ein neues Dictionary mit Werten instanziieren wollen, die von einem Listendatentyp sind.

Im gleichen Beispiel favAnimal invertieren Sie das Dictionary und konvertieren die Werte in eine Liste.

Zuerst initialisieren Sie das neue Dictionary mit defaultdict().

from collections import defaultdict

favAnimal_inverted = defaultdict(list)

Verwenden Sie als nächstes das List Comprehensions für die Invertierung und speichern Sie die invertierten Werte im neuen Dictionary.

{favAnimal_inverted[v].append(k) for k, v in favAnimal.items()}

Zuletzt, da defaultdict() eine Art Unterklasse eines Dictionaries erzeugt, konvertieren Sie es wieder in den Basistyp des Dictionaries, indem Sie es in dict() einschließen.

result = dict(favAnimal_inverted)
print(result)

Ausgabe:

{'Dog': ['John', 'Jenny', 'James'], 'Cat': ['Jane'], 'Lion': ['Jerome'], 'Giraffe': ['Jared']}

John, Jenny und James befinden sich jetzt auf derselben Liste mit dem Schlüssel Dog, anstatt dass die anderen Elemente durch das letzte Element überschrieben werden, das Dog als Wert hatte.

Der vollständige Beispielcode:

from collections import defaultdict

favAnimal_inverted = defaultdict(list)
result = dict(favAnimal_inverted)
print(result)

Zusammenfassend lässt sich sagen, dass Sie items() zu einer Schleife über das Dictionary verwenden und die Schlüssel und Werte umkehren müssen. Wenn Ihr Datensatz zufällig Dubletten enthalten sollte, dann stellen Sie sicher, dass Sie die Werte mit defaultdict() in eine Liste umwandeln und diese so manipulieren, dass die Werte des Dictionaries an die Liste angehängt werden, anstatt die vorhandenen Werte zu ersetzen.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Verwandter Artikel - Python Dictionary