Python - Karten
Python Maps, auch ChainMap genannt, ist eine Art Datenstruktur, mit der mehrere Wörterbücher zusammen als eine Einheit verwaltet werden können. Das kombinierte Wörterbuch enthält die Schlüssel- und Wertepaare in einer bestimmten Reihenfolge, wobei doppelte Schlüssel entfernt werden. Die beste Verwendung von ChainMap besteht darin, mehrere Wörterbücher gleichzeitig zu durchsuchen und die richtige Zuordnung von Schlüssel-Wert-Paaren zu erhalten. Wir sehen auch, dass sich diese ChainMaps als Stack-Datenstruktur verhalten.
Erstellen einer ChainMap
Wir erstellen zwei Wörterbücher und kombinieren sie mit der ChainMap-Methode aus der Sammlungsbibliothek. Dann drucken wir die Schlüssel und Werte des Ergebnisses der Kombination der Wörterbücher. Wenn doppelte Schlüssel vorhanden sind, bleibt nur der Wert des ersten Schlüssels erhalten.
import collections
dict1 = {'day1': 'Mon', 'day2': 'Tue'}
dict2 = {'day3': 'Wed', 'day1': 'Thu'}
res = collections.ChainMap(dict1, dict2)
# Creating a single dictionary
print(res.maps,'\n')
print('Keys = {}'.format(list(res.keys())))
print('Values = {}'.format(list(res.values())))
print()
# Print all the elements from the result
print('elements:')
for key, val in res.items():
print('{} = {}'.format(key, val))
print()
# Find a specific value in the result
print('day3 in res: {}'.format(('day1' in res)))
print('day4 in res: {}'.format(('day4' in res)))
Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt.
[{'day1': 'Mon', 'day2': 'Tue'}, {'day1': 'Thu', 'day3': 'Wed'}]
Keys = ['day1', 'day3', 'day2']
Values = ['Mon', 'Wed', 'Tue']
elements:
day1 = Mon
day3 = Wed
day2 = Tue
day3 in res: True
day4 in res: False
Neuordnung der Karte
Wenn wir die Reihenfolge der Wörterbücher ändern, während wir sie im obigen Beispiel zusammenfassen, sehen wir, dass die Position der Elemente vertauscht wird, als ob sie sich in einer durchgehenden Kette befinden. Dies zeigt erneut das Verhalten von Karten als Stapel.
import collections
dict1 = {'day1': 'Mon', 'day2': 'Tue'}
dict2 = {'day3': 'Wed', 'day4': 'Thu'}
res1 = collections.ChainMap(dict1, dict2)
print(res1.maps,'\n')
res2 = collections.ChainMap(dict2, dict1)
print(res2.maps,'\n')
Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt.
[{'day1': 'Mon', 'day2': 'Tue'}, {'day3': 'Wed', 'day4': 'Thu'}]
[{'day3': 'Wed', 'day4': 'Thu'}, {'day1': 'Mon', 'day2': 'Tue'}]
Karte aktualisieren
Wenn das Element des Wörterbuchs aktualisiert wird, wird das Ergebnis sofort im Ergebnis der ChainMap aktualisiert. Im folgenden Beispiel sehen wir, dass sich der neue aktualisierte Wert im Ergebnis widerspiegelt, ohne die ChainMap-Methode erneut explizit anzuwenden.
import collections
dict1 = {'day1': 'Mon', 'day2': 'Tue'}
dict2 = {'day3': 'Wed', 'day4': 'Thu'}
res = collections.ChainMap(dict1, dict2)
print(res.maps,'\n')
dict2['day4'] = 'Fri'
print(res.maps,'\n')
Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt.
[{'day1': 'Mon', 'day2': 'Tue'}, {'day3': 'Wed', 'day4': 'Thu'}]
[{'day1': 'Mon', 'day2': 'Tue'}, {'day3': 'Wed', 'day4': 'Fri'}]