"Abflachung" wird eine Liste der Wörterbücher
Also ist mein Ziel zu gehen aus:
fruitColourMapping = [{'apple': 'red'}, {'banana': 'yellow'}]
zu
finalMap = {'apple': 'red', 'banana': 'yellow'}
Einer Weise, die ich habe ist:
from itertools import chain
fruits = list(chain.from_iterable([d.keys() for d in fruitColourMapping]))
colour = list(chain.from_iterable([d.values() for d in fruitColourMapping]))
return dict(zip(fruits, colour))
Ist es besser mehr pythonic way?
- FYI, Sie wirklich nicht wollen, es zu tun auf diese Weise. Wörterbücher sind intrinsisch ungeordnete, es ist also nur eine Frage des Glücks, dass die Iteration über das Wörterbuch zweimal (wie Sie tun, zu bauen, die
fruit
undcolor
lists) generiert 2 Sätze von Werten in der richtigen Reihenfolge. - nicht wahr. Die Dokumentation ausdrücklich, dass, wenn Sie Durchlaufen Schlüssel und Werte, ohne mutierend das Wörterbuch in der Zwischenzeit, die Reihenfolge ist garantiert entsprechen.
- Es ist immer noch nicht eine gute Angewohnheit, in zu erhalten, aber. Es ist nicht thread-sicher, wenn das jemals wird zu einem Problem, und nur weil etwas implementiert die gleiche Schnittstelle wie ein Wörterbuch, bedeutet nicht, es verhält sich genau wie ein Wörterbuch, diese Art von details. Es ist die Art von Sache, funktioniert gut, bis es nicht, und dann bekommen Sie subtile schwer aufspüren von Fehlern. Es ist leicht genug, um zu vermeiden, so dass Sie könnte genauso gut tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
finalMap
, so wird es sowohlapple
undorange
Tasten.Warum kopieren?
In Python 3 können Sie die neue
ChainMap
:Alles, was Sie brauchen, ist diese (tun ändern Sie den Namen der Einhaltung Python-Namenskonventionen):
Und dann können Sie alle das normal-mapping-Operationen:
dict
Ergänzungen in python 3. Zum ersten mal sah diese in der neuenPython Cookbook
.Anstatt Sie zu dekonstruieren und zu rekonstruieren, einfach kopieren und aktualisieren:
Ansatz
Verwenden reduzieren die Anwendung von dict auf eine leere Initialisierung. Da
dict.update
gibt immerNone
verwendend.update(src) or d
zu gebenreduce
den gewünschten Wert zurück.Code
Test
In Python 3.5, Wörterbuch Auspacken eingeführt wurde (siehe PEP 448):
Könntest du auch versuchen:
finalMap = dict(item for mapping in fruitColourMapping for item in mapping.items())
Warum nicht Auspacken, python 3.5 bis:
Nun hast du:
Für die Ausgabe.