In Python 3.9
Basierend auf PEP 584 Mit der neuen Version von Python werden zwei neue Operatoren für Wörterbücher eingeführt: union (|) und in-place union (|=). Sie können | verwenden, um zwei Wörterbücher zusammenzuführen, während |= ein Wörterbuch an Ort und Stelle aktualisiert:
>>> pycon = {2016: "Portland", 2018: "Cleveland"}
>>> europython = {2017: "Rimini", 2018: "Edinburgh", 2019: "Basel"}
>>> pycon | europython
{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}
>>> pycon |= europython
>>> pycon
{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}
Wenn d1 und d2 zwei Wörterbücher sind, dann d1 | d2
tut dasselbe wie {**d1, **d2}
. Der Operator | wird zur Berechnung der Vereinigung von Mengen Die Notation dürfte Ihnen also bereits bekannt sein.
Ein Vorteil der Verwendung von |
ist, dass es mit verschiedenen wörterbuchähnlichen Typen arbeitet und den Typ durch die Zusammenführung beibehält:
>>> from collections import defaultdict
>>> europe = defaultdict(lambda: "", {"Norway": "Oslo", "Spain": "Madrid"})
>>> africa = defaultdict(lambda: "", {"Egypt": "Cairo", "Zimbabwe": "Harare"})
>>> europe | africa
defaultdict(<function <lambda> at 0x7f0cb42a6700>,
{'Norway': 'Oslo', 'Spain': 'Madrid', 'Egypt': 'Cairo', 'Zimbabwe': 'Harare'})
>>> {**europe, **africa}
{'Norway': 'Oslo', 'Spain': 'Madrid', 'Egypt': 'Cairo', 'Zimbabwe': 'Harare'}
Sie können ein defaultdict verwenden, wenn Sie fehlende Schlüssel effektiv behandeln wollen. Beachten Sie, dass |
bewahrt das Standarddiktat, während {**europe, **africa}
nicht.
Es gibt einige Ähnlichkeiten zwischen der |
bei Wörterbüchern funktioniert und wie +
funktioniert bei Listen. In der Tat, die +
Betreiber war ursprünglich vorgeschlagen um auch Wörterbücher zusammenzuführen. Diese Korrespondenz wird noch deutlicher, wenn Sie sich den In-Place-Operator ansehen.
Die grundlegende Verwendung von |=
ist es, ein Wörterbuch an Ort und Stelle zu aktualisieren, ähnlich wie bei .update()
:
>>> libraries = {
... "collections": "Container datatypes",
... "math": "Mathematical functions",
... }
>>> libraries |= {"zoneinfo": "IANA time zone support"}
>>> libraries
{'collections': 'Container datatypes', 'math': 'Mathematical functions',
'zoneinfo': 'IANA time zone support'}
Beim Zusammenführen von Wörterbüchern mit |
müssen beide Wörterbücher von einem geeigneten Wörterbuchtyp sein. Andererseits kann der In-Place-Operator ( |=
) kann mit jeder wörterbuchähnlichen Datenstruktur arbeiten:
>>> libraries |= [("graphlib", "Functionality for graph-like structures")]
>>> libraries
{'collections': 'Container datatypes', 'math': 'Mathematical functions',
'zoneinfo': 'IANA time zone support',
'graphlib': 'Functionality for graph-like structures'}