Python - Mappe

Python Maps chiamato anche ChainMap è un tipo di struttura dati per gestire più dizionari insieme come un'unica unità. Il dizionario combinato contiene le coppie chiave e valore in una sequenza specifica eliminando eventuali chiavi duplicate. Il miglior utilizzo di ChainMap consiste nel cercare in più dizionari contemporaneamente e ottenere la corretta mappatura della coppia chiave-valore. Vediamo anche che queste ChainMap si comportano come una struttura di dati dello stack.

Creazione di una ChainMap

Creiamo due dizionari e li associamo utilizzando il metodo ChainMap dalla libreria delle collezioni. Quindi stampiamo le chiavi e i valori del risultato della combinazione dei dizionari. Se sono presenti chiavi duplicate, viene conservato solo il valore della prima chiave.

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)))

Quando il codice precedente viene eseguito, produce il seguente risultato.

[{'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

Riordino della mappa

Se cambiamo l'ordine dei dizionari durante il clubbing nell'esempio sopra, vediamo che la posizione degli elementi viene scambiata come se fossero in una catena continua. Questo mostra ancora una volta il comportamento di Maps come stack.

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')

Quando il codice precedente viene eseguito, produce il seguente risultato.

[{'day1': 'Mon', 'day2': 'Tue'}, {'day3': 'Wed', 'day4': 'Thu'}] 

[{'day3': 'Wed', 'day4': 'Thu'}, {'day1': 'Mon', 'day2': 'Tue'}]

Aggiornamento della mappa

Quando l'elemento del dizionario viene aggiornato, il risultato viene aggiornato istantaneamente nel risultato di ChainMap. Nell'esempio seguente vediamo che il nuovo valore aggiornato si riflette nel risultato senza applicare nuovamente in modo esplicito il metodo ChainMap.

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')

Quando il codice precedente viene eseguito, produce il seguente risultato.

[{'day1': 'Mon', 'day2': 'Tue'}, {'day3': 'Wed', 'day4': 'Thu'}] 

[{'day1': 'Mon', 'day2': 'Tue'}, {'day3': 'Wed', 'day4': 'Fri'}]