Versuchen Sie es mit dem Sammlungsmodul (ChainMap) von python3

collections Sammlungen enthalten Container-Datentypen. In Python3 (3.4.3) gibt es einige Ergänzungen zu Python2.7. Referenz-URL: http://docs.python.jp/3.4/library/collections.html Die aus Python2.7 hinzugefügten Punkte lauten wie folgt.

ChainMap: Eine wörterbuchähnliche Klasse, die eine einzelne Ansicht mehrerer Zuordnungen erstellt UserDict: Ein Wrapper für Wörterbuchobjekte, der die Unterklasse von Wörterbüchern vereinfacht UserList: Listenobjekt-Wrapper, der die Unterklassifizierung von Listen vereinfacht UserString: Ein Wrapper für Zeichenfolgenobjekte, mit dem Zeichenfolgen einfach in Unterklassen unterteilt werden können

Benutzer ~ ist normalerweise ein Klassen-Wrapper, daher wird die Erklärung weggelassen.

ChainMap

Basic

Der Code, den ich dieses Mal geschrieben habe, ist auf GitHub. (https://github.com/KodairaTomonori/Qiita/blob/master/default_module/collections/test_ChainMap.py) Zunächst aus der einfachen Verwendung von ChainMap

test_ChainMap.py


import collections
import see
dict_a = dict(a=1, b=2, c=3)
dict_b = dict(x=10, y=11, z=12)
def get_name(arg_id, arg_values):
    for key, value in arg_values.items():
        if id(value) == arg_id: return key
    return 'NotDefined'

def print_arguments(*args, arg_values):
    for arg in args:
        print(get_name(id(arg), arg_values) + ' : ' + repr(arg) )

chain_map = collections.ChainMap(dict_a, dict_b)
child = chain_map.new_child()
print('make_chain_maps')
print_arguments(chain_map, child, arg_values=locals() )
print('chain_map.maps: ' + repr(chain_map.maps) )

Ausgabe

make_chain_maps chain_map : ChainMap({'b': 2, 'c': 3, 'a': 1}, {'z': 12, 'x': 10, 'y': 11}) child : ChainMap({}, {'b': 2, 'c': 3, 'a': 1}, {'z': 12, 'x': 10, 'y': 11}) chain_map.maps: [{'a': 1, 'c': 3, 'b': 2}, {'y': 11, 'z': 12, 'x': 10}]

Erläuterung

Wie der Name schon sagt, verbindet ChainMap`` map (dictionaly). Anstatt sie nur zu verbinden, können Sie jedes als Wörterbuch behalten. Wie Sie der Ausgabe entnehmen können, ist "dict_a" und "dict_b" getrennt. Wenn Sie "chain ['z']" und "chain_map ['b']" ausführen, erhalten Sie "2" bzw. "12". Wenn Sie es verwenden, können Sie es normalerweise als ein "Diktat" verwenden. Durch Setzen von ".new_child ()" wird zu Beginn ein neues "Diktat" erstellt. Durch Festlegen von ".maps" wird ChainMap aufgelistet und zurückgegeben.

Obwohl nicht im Code geschrieben, können Sie ".items (), .keys (), .values ()" wie normales "dict" verwenden. Wenn man sich die Referenz-URL ansieht, scheint die Suche von vorne zu kommen und die anderen nur von vorne.

Die Suche sucht weiterhin nach der zugrunde liegenden Zuordnung, bis der Schlüssel gefunden wird. Im Gegensatz dazu werden Schreiben, Aktualisieren und Löschen nur bei der ersten Zuordnung ausgeführt.

Untergeordnete und übergeordnete Updates

Als nächstes werden wir aktualisieren.

update.py


child.update(d=4, a=0)
print('update_child_map')
print_arguments(chain_map, child, arg_values=locals() )
print()

chain_map.update(z=100)
print('update_parent_map')
print_arguments(chain_map, child, arg_values=locals() )

Ausgabe 2

update_child_map chain_map : ChainMap({'a': 1, 'c': 3, 'b': 2}, {'y': 11, 'z': 12, 'x': 10}) child : ChainMap({'a': 0, 'd': 4}, {'a': 1, 'c': 3, 'b': 2}, {'y': 11, 'z': 12, 'x': 10}) update_parent_map chain_map : ChainMap({'a': 1, 'z': 100, 'c': 3, 'b': 2}, {'y': 11, 'z': 12, 'x': 10}) child : ChainMap({'a': 0, 'd': 4}, {'a': 1, 'z': 100, 'c': 3, 'b': 2}, {'y': 11, 'z': 12, 'x': 10})

Erklärung 2

Das Schreiben oder Aktualisieren des untergeordneten Elements (Diktat ganz links) ändert das übergeordnete Element nicht (Diktat ganz links). Wenn Sie das übergeordnete Element ändern, wird die Änderung auch in "Kind" angezeigt. Die Zeiger der gemeinsamen Elemente von "chain_map" und "child" scheinen auf dieselbe Stelle zu verweisen.

verschmelzen

Wie man ein Wörterbuch erstellt, wenn etwas unordentlich und schwer zu sehen ist. Sie können es einfach in dict () einschließen.

merge.py


print('each_Chain')
print('chain_map:', dict(**chain_map) )
print('child    :', dict(**child) )

Ausgabe

each_Chain chain_map: {'x': 10, 'z': 100, 'c': 3, 'b': 2, 'a': 1, 'y': 11} child : {'x': 10, 'z': 100, 'c': 3, 'b': 2, 'a': 0, 'd': 4, 'y': 11}

Zusammenfassung

ChainMap ist praktisch, aber ich kann mir keine Verwendung dafür vorstellen.

Diese Klasse kann zum Simulieren verschachtelter Bereiche verwendet werden und ist nützlich für die Zuordnung.

Obwohl es in der Referenz-URL geschrieben ist, verstehe ich es nicht gut, weil es nur Katakana ist. Es scheint, dass es verwendet werden kann, um die Aktualisierung der Gewichte beim Lernen mit NLP zu überprüfen.

Recommended Posts

Versuchen Sie es mit dem Sammlungsmodul (ChainMap) von python3
Versuchen Sie es mit dem Python Cmd-Modul
Anzeigen mit dem Python-Modul des mobilen Nifty Cloud-Backends
Python-Sammlungsmodul
Versuchen Sie es mit der Wunderlist-API in Python
Übergeben Sie den Pfad des importierten Python-Moduls
[Python] Probieren Sie pydash der Python-Version von lodash aus
Überprüfen Sie den Pfad des importierten Python-Moduls
Test von emacs-org parser orgparse für Python
[Python] Lassen Sie uns das Modul regelmäßig nach Zeitplan ausführen
Versuchen Sie es mit der BitFlyer Ligntning API in Python
Python: Versuchen Sie, die Benutzeroberfläche von Pythonista 3 auf dem iPad zu verwenden
der Zen von Python
Versuchen Sie es mit dem Python-Webframework Tornado Part 1
Probieren Sie Progate Free Edition [Python I]
Ich habe versucht, das Datetime-Modul von Python zu verwenden
[Python] Ein grobes Verständnis des Protokollierungsmoduls
Versuchen Sie es mit dem Python-Webframework Tornado Part 2
Versuchen Sie es mit Tweepy [Python2.7]
Versuchen Sie, die DropBox Core-API mit Python zu verwenden
Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 2
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
Versuchen Sie, die Bildkonvertierung mit OpenCV mit Python zu projizieren
Der Schmerz von gRPC mit Python. November 2019. (Persönliches Memo)
Verwenden wir die Python-Version des Confluence-API-Moduls.
Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 1
Schreiben Sie Daten mit dem Python-Anforderungsmodul in KINTONE
Erläuterung des Konzepts der Regressionsanalyse mit Python Extra 1
Studie aus Python Hour8: Verwenden von Paketen
Auf dem Weg zum Ruhestand von Python2
Über das Python-Modul venv
Versuchen Sie es mit Kubernetes Client -Python-
Automatisches Update des Python-Moduls
Versuchen Sie es mit der Twitter-API
Python: Grundlagen der Verwendung von Scikit-Learn ①
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit der PeeringDB 2.0-API
Über die Funktionen von Python
Die Kraft der Pandas: Python
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Versuchen Sie, die Funktionsliste des Python> os-Pakets abzurufen
Versuchen Sie es mit dem Python-Webframework Django (2). Schauen Sie sich settings.py an
Erleichtern Sie die Anzeige von Python-Modulausnahmen
Probieren Sie die ähnliche Suche von Image Search mit Python SDK [Search] aus.
Lösen Sie das japanische Problem, wenn Sie das CSV-Modul in Python verwenden.
Was ist die Standard-TLS-Version des Python-Anforderungsmoduls?
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
26.11.2015 Python> Funktionsliste des Moduls anzeigen> Mathematik importieren> Verzeichnis (Mathematik)
Testen Sie die Version des Argparse-Moduls
Die Geschichte von Python und die Geschichte von NaN
[Python] Der Stolperstein des Imports
Erster Python 3 ~ Der Beginn der Wiederholung ~
Probieren Sie das Python LINE Pay SDK aus
Eine kurze Zusammenfassung der Python-Sammlung
Existenz aus Sicht von Python
Versuchen Sie es mit der Pleasant-API (Python / FastAPI).
pyenv-change die Python-Version von virtualenv
Versuchen Sie es mit LevelDB mit Python (plyvel)