2017-11-15 4 views
1

Ich habe ein Wörterbuch mit eindeutigen Werten und ich möchte es invertieren (d. H. Schlüssel mit Werten austauschen) inplace. Gibt es eine Möglichkeit, ohne ein anderes Wörterbuch zu verwenden?Invertieren eines Wörterbuchs inplace

Ich würde es vorziehen, nur die Elemente innerhalb des Diktats zu manipulieren, als ein neues Wörterbuch zu verwenden, so dass id(my_dict) gleich bleiben würde.

+1

Pythons "Diktat" ist ungeordnet. Sie sollten erklären, was Sie meinen, indem Sie es umkehren. – Drop

+0

Wie sollte Ihrer Meinung nach "Inplace" funktionieren? Ist die Zuweisung eines neuen Wörterbuchs zu einer alten Wörterbuchvariablen in Ordnung oder möchten Sie nur Elemente innerhalb des Diktats manipulieren? – Drop

+0

by reverse Ich meine Swap-Schlüssel-Werte, und ich würde lieber nur die Elemente im Dict manipulieren und nicht mit einem neuen Wörterbuch, so dass die ID (dict) würde gleich bleiben. – Kinor

Antwort

2

Wenn Sie versuchen, Schlüssel und Werte zu tauschen und nicht dagegen, doppelte Werte Schlüsselkonflikte erstellen, können Sie „reverse“ das Wörterbuch ziemlich leicht mit einer einzigen Zeile Code:

dictionary = dict(map(reversed, dictionary.items())) 

Wenn Sie lieber das Wörterbuch Verständnis Syntax stattdessen verwenden würde, diese Zeile schreiben:

dictionary = {value: key for key, value in dictionary.items()} 

Wenn Sie nicht die items Methode des Wörterbuchs verwenden möchten, ist es ziemlich einfach zu vermeiden:

dictionary = {dictionary[key]: key for key in dictionary} 

Wenn Sie eine Kopie des Wörterbuchs zu schaffen leisten können, können Sie es an Ort und Stelle umkehren kann, wenn nötig:

def reverse_in_place(dictionary): 
    reference = dictionary.copy() 
    dictionary.clear() 
    dictionary.update(map(reversed, reference.items())) 
+0

Alle diese erstellen ein neues Diktat verletzt "ohne Verwendung eines anderen Wörterbuchs" -Anforderung. Ich sehe nicht wirklich, wie Schlüssel und Werte ausgetauscht werden können. @NogaKinor sollte die Frage wahrscheinlich beantworten, bevor sie beantwortet werden kann. – Drop

+0

Ich mag das letzte, obwohl ich wahrscheinlich nur 'reference = list (dictionary.items())' hätte. –

+0

@NoctisSkytower Der letzte funktioniert genau so, wie ich es wollte. Vielen Dank! – Kinor

0

Ich denke, Sie möchten die Schlüssel und die Werte des Diktats austauschen?

Sie können es wie folgt tun:

dict_name = dict(zip(dict_name.values(), dict_name.keys()))