[PYTHON] Hauptfunktionen von ChainMap

Ab Python 3.3 ist eine Klasse namens ChainMap in der Standardbibliothek der Sammlung verfügbar, aber ich werde die Hauptfunktionen als Memorandum aufschreiben.

ChainMap wird verwendet, um mehrere Wörterbücher zu einem Wörterbuch zu sammeln.

Um dasselbe mit dict zu tun, führen Sie mehrere Wörterbücher zusammen und fügen Sie die Elemente der ursprünglichen Wörterbücher hinzu, wie in [diesem Artikel] beschrieben (http://qiita.com/kk6/items/6362a5fc9f3f06a5969a). Ich denke, ich werde ein neues Wörterbuch erstellen.

ChainMap hingegen kopiert keine Elemente in das neue Objekt, behält jedoch das ursprüngliche Wörterbuch als Referenz bei, sodass Sie das ChainMap-Objekt nicht aktualisieren müssen, wenn sich das ursprüngliche Wörterbuch ändert.

Betrachten Sie beispielsweise das folgende Beispiel.

python


from collections import ChainMap

d1 = {'A': 1, 'B':2}
d2 = {'C': 3, 'D':4}

cm = ChainMap(d1, d2)

Wenn Sie nun ein Element zu d1 hinzufügen, können Sie sehen, dass Sie dieses Element auch mit cm erhalten können.

python


>>> d1['E'] = 5
>>> cm['E']
5

Sie können das Originalwörterbuch mit der Eigenschaft maps abrufen.

python


>>> cm.maps
[{'E': 5, 'B': 2, 'A': 1}, {'D': 4, 'C': 3}]

Wenn zwischen den ursprünglichen Wörterbüchern doppelte Schlüssel vorhanden sind, hat das Element im vorherigen Wörterbuch Vorrang.

python


>>> d1['D'] = 6
>>> cm.maps
[{'E': 5, 'B': 2, 'A': 1, 'D': 6}, {'D': 4, 'C': 3}]
>>> cm['D']
6

Das ursprüngliche Wörterbuch ist nicht auf das integrierte Diktierobjekt beschränkt, sondern es kann ein Zuordnungsobjekt angegeben werden. Im folgenden Beispiel wird "UserDict" aus derselben Standardbibliothek wie das Quellwörterbuch verwendet.

python


from collections import UserDict

class MyDict(UserDict):

    def __getitem__(self, key):
        if key not in self.data:
            return 'Not found'
        else:
            return self.data[key]

md1 = MyDict(d1)
md2 = MyDict(d2)

cm2 = ChainMap(md1, md2)

In diesem Beispiel wird, selbst wenn "md2" den Schlüssel "C" hat, "getitem" von "md1" zuerst aufgerufen, sodass "Nicht gefunden" zurückgegeben wird.

python


>>> cm2['C']
'Not found'

Recommended Posts

Hauptfunktionen von ChainMap
Funktionen der Go-Sprache
Merkmale der Programmiersprache [Memo]
Über die Funktionen von Python
Train_test_split des Feature-Betrags, der von dict gehalten wird
Funktionen von pd.NA in Pandas 1.0.0 (rc0)
Beherrschen Sie die umfangreichen Funktionen von IPython
Beherrschung der umfangreichen Funktionen von IPython (2)
Merkmale der symbolischen und harten Verbindung
Korrelationsvisualisierung der Merkmalsmenge und der Zielvariablen
[Grundlagen der Python-Grundlagen] Warum __name__ == "__main__"