Heim  >  Artikel  >  Backend-Entwicklung  >  Python führt mehrere Wörterbücher oder Mapping-Tutorials zusammen

Python führt mehrere Wörterbücher oder Mapping-Tutorials zusammen

Guanhui
Guanhuinach vorne
2020-07-24 17:33:382933Durchsuche

Python führt mehrere Wörterbücher oder Mapping-Tutorials zusammen

Frage

Jetzt gibt es mehrere Wörterbücher oder Zuordnungen, und Sie möchten sie logisch zu einem einzigen Perform zusammenführen einige Vorgänge nach der Zuordnung, z. B. das Nachschlagen eines Werts oder das Überprüfen, ob bestimmte Schlüssel vorhanden sind.

Lösung

Verbinden Sie sich mit zwei Wörterbüchern wie folgt:

a = {'x': 1, 'z': 3 }
b = {'y': 2, 'z': 4 }

Angenommen, Sie müssen einen Suchvorgang in zwei Wörterbüchern durchführen (z. B. erstes). Suchen Sie ab a, wenn nicht gefunden, dann suchen Sie in b). Eine sehr einfache Lösung besteht darin, die ChainMap-Klasse aus dem Collections-Modul zu verwenden. Zum Beispiel:

from collections import ChainMap
c = ChainMap(a,b)
print(c['x']) # Outputs 1 (from a)
print(c['y']) # Outputs 2 (from b)
print(c['z']) # Outputs 3 (from a)

Diskutieren

Eine ChainMap akzeptiert mehrere Wörterbücher und wandelt sie logisch in ein Wörterbuch um. Diese Wörterbücher werden jedoch nicht wirklich zusammengeführt. Die ChainMap-Klasse erstellt lediglich intern eine Liste, um diese Wörterbücher zu speichern, und definiert einige allgemeine Wörterbuchoperationen neu, um diese Liste zu durchlaufen. Die meisten Wörterbuchoperationen können normal verwendet werden, wie zum Beispiel:

>>> len(c)
3
>>> list(c.keys())
['x', 'y', 'z']
>>> list(c.values())
[1, 2, 3]
>>>

Wenn ein doppelter Schlüssel erscheint, wird das erste Vorkommen des zugeordneten Werts zurückgegeben. Daher gibt c['z'] im Beispielprogramm immer den entsprechenden Wert im Wörterbuch a zurück, nicht den entsprechenden Wert in b.

Das Aktualisieren oder Löschen eines Wörterbuchs betrifft immer das erste Wörterbuch in der Liste. Zum Beispiel:

>>> c['z'] = 10
>>> c['w'] = 40
>>> del c['x']
>>> a
{'w': 40, 'z': 10}
>>> del c['y']
Traceback (most recent call last):
...
KeyError: "Key not found in the first mapping: 'y'"
>>>

ChainMap ist sehr nützlich für Bereichsvariablen (wie Globals, Locals usw.) in Programmiersprachen. Tatsächlich gibt es Möglichkeiten, es einfacher zu machen:

>>> values = ChainMap()
>>> values['x'] = 1
>>> # Add a new mapping
>>> values = values.new_child()
>>> values['x'] = 2
>>> # Add a new mapping
>>> values = values.new_child()
>>> values['x'] = 3
>>> values
ChainMap({'x': 3}, {'x': 2}, {'x': 1})
>>> values['x']
3
>>> # Discard last mapping
>>> values = values.parents
>>> values['x']
2
>>> # Discard last mapping
>>> values = values.parents
>>> values['x']
1
>>> values
ChainMap({'x': 1})
>>>

Als Alternative zu ChainMap könnten Sie die Verwendung der update()-Methode zum Zusammenführen der beiden Wörterbücher in Betracht ziehen. Zum Beispiel:

>>> a = {'x': 1, 'z': 3 }
>>> b = {'y': 2, 'z': 4 }
>>> merged = dict(b)
>>> merged.update(a)
>>> merged['x']
1
>>> merged['y']
2
>>> merged['z']
3
>>>

Dies würde auch funktionieren, aber es würde erfordern, dass Sie ein völlig anderes Wörterbuchobjekt erstellen (oder die vorhandene Wörterbuchstruktur zerstören). Wenn gleichzeitig das ursprüngliche Wörterbuch aktualisiert wird, wird diese Änderung nicht im neuen zusammengeführten Wörterbuch widergespiegelt. Zum Beispiel:

>>> a['x'] = 13
>>> merged['x']
1

ChianMap verwendet das Originalwörterbuch und erstellt selbst kein neues Wörterbuch. Daher werden die oben genannten Ergebnisse nicht erzielt, wie zum Beispiel:

>>> a = {'x': 1, 'z': 3 }
>>> b = {'y': 2, 'z': 4 }
>>> merged = ChainMap(a, b)
>>> merged['x']
1
>>> a['x'] = 42
>>> merged['x'] # Notice change to merged dicts
42
>>>

Empfohlenes Tutorial: „Python-Tutorial

Das obige ist der detaillierte Inhalt vonPython führt mehrere Wörterbücher oder Mapping-Tutorials zusammen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen