Aktualisieren eines python-Wörterbuch, während das hinzufügen, um bestehende Schlüssel?
Ich bin auf der Suche nach der effizientesten und pythonic (vor allem effizienten) Weg, so aktualisieren Sie ein Wörterbuch, sondern halten die alten Werte, wenn ein vorhandener Schlüssel ist vorhanden. Zum Beispiel...
myDict1 = {'1': ('3', '2'), '3': ('2', '1'), '2': ('3', '1')}
myDict2 = {'4': ('5', '2'), '5': ('2', '4'), '2': ('5', '4')}
myDict1.update(myDict2) gives me the following....
{'1': ('3', '2'), '3': ('2', '1'), '2': ('5', '4'), '5': ('2', '4'), '4': ('5', '2')}
beachten Sie, wie die Taste '2' besteht in beiden Wörterbüchern und verwendet, um Werte ('3', '1')), aber jetzt hat es die Werte vom Schlüssel in myDict2 ('5', '4')?
Gibt es eine Möglichkeit, aktualisieren Sie das Wörterbuch in einer effizienten Art und Weise, so wie die Taste '2' endet, bis dass die Werte ('3', '1', '5', '4')? #in keiner bestimmten Reihenfolge
Vielen Dank im Voraus
- Nein, es gibt keinen einfachen Weg, es zu tun. Sie haben zu Durchlaufen, Schlüssel-und merge-Werte.
- Nun, das ist schade, danke für die Antwort.
- Scheint, wie Sie sind, darstellt ein Diagramm mit angrenzens Liste für mich... So was ist, wenn die
'2':('3','1')
und'2':('5','3')
zusammengeführt werden? Wird das Ergebnis doppelt'3'
s in der Liste? - dann {'3': ['1', '5'], '1': ['3'], '5':[3]}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, der effektivste Weg, es zu tun, wäre so etwas wie dieses:
Aber es ist nicht eine
update
äquivalent für das, was Sie suchen, zu tun, leider.Den schnellsten Weg zum Zusammenführen von großen Wörterbüchern ist die Einführung einer intermediate-Objekt, das verhält sich, als ob die dicts zusammengeführt werden, ohne tatsächlich Zusammenführen (siehe @Raymond Hettinger Antwort):
Ob es anwendbar ist, hängt davon ab, wie Sie wollen, verwenden Sie die kombinierte dict später.
Es nutzt
Sammlungen.ChainMap
von Python 3.3+ für die Bequemlichkeit, um den vollständigenMutableMapping
Schnittstelle; Sie könnte implementieren, dass nur Teile, die Sie verwenden, auf ältere Python-Versionen.Vielleicht ein
defaultdict
helfen würdeNein es gibt keine einfache Möglichkeit, es zu tun, fürchte ich.
Der beste Weg ist wahrscheinlich überarbeiten und Zusammenführen. So etwas wie:
if key in myDict2
alsif key in myDict2.iterkeys()
.key in myDict2
ist O(1) währendkey in myDict2.iterkeys()
ist O(n) wobei n die Länge dermyDict2
. Ich glaube, das ist das, was @user2246674 wurde versucht zu vermitteln.