Neue Funktionen in Python 3.9 (1) - Der Summensatzoperator kann im Wörterbuchtyp verwendet werden.

Einführung

Neue Änderungen in Python 3.9, die voraussichtlich im Oktober 2020 veröffentlicht werden, sind im Artikel [Was ist neu in Python 3.9 (Zusammenfassung)] zusammengefasst (https://qiita.com/ksato9700/items/d5df9d36147796c86c77). gestartet. Unter diesen habe ich beschlossen, eine relativ große Anzahl von Elementen in einem separaten Artikel auszuschneiden, aber als ersten Schritt möchte ich die Änderung aufgreifen, die es ermöglicht, den Summensatzoperator im Wörterbuchtyp zu verwenden.

Integration vom Typ Wörterbuch

Der Wörterbuchtyp ist einer der in Python integrierten Standarddatentypen. In anderen Sprachen wird es unterschiedlich als Hash-Typ, Map-Typ, assoziativer Array-Typ bezeichnet. Der Punkt ist jedoch, dass es sich um einen Datentyp zum Speichern von Name / Wert-Paaren (Schlüssel-Wert-Paaren) handelt.

Beachten Sie, dass es zwei Daten vom Typ Wörterbuch (d1, d2) gibt, die zu Daten vom Typ Wörterbuch gemischt werden. Es gab verschiedene Möglichkeiten, dies zu tun.

1) Verwenden Sie die Update-Methode

Wenn Sie d1.update (d2) `ausführen, werden die Daten des integrierten Wörterbuchtyps überschrieben und in d1 gespeichert. Wenn Sie d1 so lassen möchten, wie es ist

e = d1.copy()
e.update(d2)

Sie müssen eine Kopie erstellen und dann die Methode "update" aufrufen. Es ist ein wenig mühsam.

2) Nehmen Sie den Inhalt heraus und ordnen Sie ihn an

Als "{** d1, ** d2}" werden die Inhaltsdaten von jedem Wörterbuchtyp abgerufen und in einem neuen Wörterbuchtyp zurückgegeben. Sie können integrierte Wörterbuchdaten ohne Zwischenvariablen erhalten, aber es ist schwer zu sagen, was Sie tun, wenn Sie sich Pat ansehen. Sogar Guido, der ursprüngliche Autor von Python, ist so verwirrend, dass er sagt: "Ich habe vergessen, dass es so etwas gibt" (lacht).

3) Verwenden Sie collection.ChainMap

Das Modul "Sammlungen" hat eine Klasse namens "ChainMap". Wenn Sie "dict (ChainMap (d2, d1))" verwenden, können Sie integrierte Wörterbuchdaten abrufen. Das Verwirrende ist, dass im Gegensatz zum obigen Beispiel, wenn Sie denselben Schlüssel haben, der linke Vorrang hat. Obwohl Standard, müssen Sie das Modul "Sammlungen" importieren, und diese Methode ist auch nicht sehr intuitiv.

4) Verwenden Sie einen Konstruktor vom Typ Wörterbuch

Im Konstruktor des Wörterbuchtyps befindet sich "dict (Zuordnung, ** kwarg)". Wenn Sie dies also verwenden, um "dict (d1, ** d2)" zu erstellen, erhalten Sie integrierte Wörterbuchtypdaten. Durch Setzen von "** d2" wird der Inhalt von "d2" als Schlüsselwortargumente angegeben und zum Inhalt des ersten Arguments hinzugefügt ("d1" ändert sich nicht). Das Problem bei dieser Methode ist, dass der Inhalt von "d2" als Schlüsselwortargumente angegeben wird, sodass er nur integriert werden kann, wenn der Schlüssel ein String-Wörterbuch-Typ ist.

Summensatzoperator und Wörterbuchtyp

Für die im Set-Typ verwendeten Operatoren|Wann|=Es gibt zum Beispiel, dass Sie es so verwenden können.

>>> a = set((1,2,3))
>>> b = set((3,4,5))
>>> a | b
{1,2,3,4,5}
>>> a |= b
>>> a
{1,2,3,4,5}

Es ist ein Summensatzoperator, da er die "Summe" zweier Sätze berechnet. Die diesmal für 3.9 geplante Änderung besteht darin, diesen Summensatzoperator für die Integration von Wörterbuchdaten zu verwenden.

Die Spezifikation ist sehr einfach und die Summe der beiden Wörterbuchtypdaten wird wie der Set-Typ verwendet. Der Unterschied zu Set besteht in der Entsprechung, wenn sich die Schlüssel überlappen, und selbst wenn sich das Set überlappt, muss nur nicht zweimal gezählt werden. Beim Wörterbuchtyp gibt es jedoch sowohl Werte als auch Schlüssel, sodass diese verwendet werden müssen Wird zum Problem. Bei dieser Änderung wird der Wert auf der rechten Seite der Formel priorisiert. Es ist ein Bild der Überlappung in der Reihenfolge von links und des Überschreibens des Bildes mit demselben Schlüssel.

Es ist schneller, es als Beispiel zu sehen.

>>> c = {'a': 1, 'b': 2}
>>> d = {'b': 3, 'c': 7}
>>> c | d
{'a': 1, 'b': 3, 'c': 7}
>>> d | c
{'a': 1, 'b': 2, 'c': 7}
>>> c |= d
>>> c
{'a': 1, 'b': 3, 'c': 7}

Hierc | dMit dem Ergebnis vond | cDie Tatsache, dass das Ergebnis von unterschiedlich ist (nicht konvertierbar), ist als "Summen" -Operator unangenehm, aber Sie können es nur als solchen betrachten.

Zusammenfassung

Ich werde den Summensatzoperator erläutern, der in den Wörterbuchtyp in Python 3.9 basierend auf dem Inhalt von PEP-584 eingeführt wird. Ich tat. Ich denke, dass ich in vielen Fällen "dict.update" verwendet habe, aber da es den ursprünglichen Wörterbuchtyp bricht, gibt es verschiedene Verwendungsmöglichkeiten, um unveränderliche Operationen in einer leicht verständlichen Notation zu zeichnen.

Recommended Posts

Neue Funktionen in Python 3.9 (1) - Der Summensatzoperator kann im Wörterbuchtyp verwendet werden.
Um Japanisch mit Python in der Docker-Umgebung verwenden zu können
Operatoren ++, - können nicht in Python verwendet werden (Unterschied zu PHP)
Kann bei Wettkampfprofis eingesetzt werden! Python-Standardbibliothek
Skripte, die bei der Verwendung von Bottle in Python verwendet werden können
Zusammenfassung der Standardeingabe von Python, die in Competition Pro verwendet werden kann
Neue Funktionen in Python 3.4.0 (3) - Generische Funktionen für den Einzelversand
Ich habe einen Tri-Tree geschrieben, der für die Implementierung von Hochgeschwindigkeitswörterbüchern in D-Sprache und Python verwendet werden kann
++ und-können nicht zum Inkrementieren / Dekrementieren in Python verwendet werden
Dateitypen, die mit Go verwendet werden können
Funktionen, die in der for-Anweisung verwendet werden können
Grundlegende Algorithmen, die bei Wettkampfprofis eingesetzt werden können
[Memorandum] Japanische Schlüssel können nicht in Pythons string.Template.substitute verwendet werden
ANTs Bildregistrierung, die in 5 Minuten verwendet werden kann
Listenverständnis, da operator.methodcaller nicht mit Python 2.5 verwendet werden kann
Was ist neu in Python 3.5?
Neu in Python 3.4.0 (1) --pathlib
Nichtlineare simultane Gleichungen können mit Python leicht gelöst werden.
Organisieren Sie Typen in Python
Was ist neu in Python 3.6?
[Redash] Die Standardbibliothek kann nicht in der Python-Funktion verwendet werden
Kann mit AtCoder verwendet werden! Eine Sammlung von Techniken zum Zeichnen von Kurzcode in Python!
[Python3] Code, der verwendet werden kann, wenn Sie die Größe von Bildern Ordner für Ordner ändern möchten
[Python] Argumente mit variabler Länge können beim Entpacken iterierbarer Elemente verwendet werden
Goroutine (parallele Steuerung), die im Feld eingesetzt werden kann
Goroutine, die im Feld verwendet werden kann (errgroup.Group Edition)
SSD 1306 OLED kann mit Raspeye + Python verwendet werden (Hinweis)
Ein Forscher eines Pharmaunternehmens fasste die in Python verwendeten Operatoren zusammen
Erstellen Sie ein Wörterbuch in Python
Was ist neu in Python 3.10 (Zusammenfassung)
Vermeiden Sie KeyError im Python-Wörterbuch
Neu in Python 3.4.0 (2) --enum
Was ist neu in Python 3.9 (Zusammenfassung)
Verschachteln ternärer Operatoren in Python
Neue Python-Grammatik und Funktionen, die im Einführungsbuch nicht erwähnt werden
33 Zeichenfolgen, die in Python nicht als Variablennamen verwendet werden sollten
Ein Timer (Ticker), der im Feld verwendet werden kann (kann überall verwendet werden)
Untersuchen, was in Python als Markdown-Parser verwendet werden kann
[Python] Warum unveränderliche Haze-Int-Typen in andere Werte geändert werden können
Python-Standardmodul, das in der Befehlszeile verwendet werden kann
Hinweise zu Python- und Wörterbuchtypen
Neu in Python3.9 Wörterbücher zusammenführen
8 häufig verwendete Befehle in Python Django
[Python] Grundkenntnisse in AtCoder
Einfaches Auffüllen von Daten, die in der Verarbeitung natürlicher Sprache verwendet werden können
Ich habe eine generische Python-Projektvorlage erstellt
Studie von Anfang an Hour6: Häufig verwendete Datentypen: Tapple-Typ, Set-Typ, Dictionary-Typ
gRPC-Methoden, die beim Umgang mit Protokollpuffern verwendet werden, geben Python CopyFrom, Extend ein