Python - Cartes

Python Maps, également appelé ChainMap, est un type de structure de données permettant de gérer plusieurs dictionnaires ensemble en une seule unité. Le dictionnaire combiné contient les paires clé et valeur dans une séquence spécifique éliminant les clés en double. La meilleure utilisation de ChainMap est de rechercher dans plusieurs dictionnaires à la fois et d'obtenir le mappage de paires clé-valeur approprié. Nous voyons également que ces ChainMaps se comportent comme une structure de données de pile.

Créer une ChainMap

Nous créons deux dictionnaires et les regroupons en utilisant la méthode ChainMap de la bibliothèque de collections. Ensuite, nous imprimons les clés et les valeurs du résultat de la combinaison des dictionnaires. S'il existe des clés en double, seule la valeur de la première clé est conservée.

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

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant.

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

Réorganisation de la carte

Si nous changeons l'ordre des dictionnaires en les matraquant dans l'exemple ci-dessus, nous voyons que la position des éléments est interchangée comme s'ils étaient dans une chaîne continue. Cela montre à nouveau le comportement des cartes en tant que piles.

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

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant.

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

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

Mise à jour de la carte

Lorsque l'élément du dictionnaire est mis à jour, le résultat est instantanément mis à jour dans le résultat de ChainMap. Dans l'exemple ci-dessous, nous voyons que la nouvelle valeur mise à jour se reflète dans le résultat sans appliquer à nouveau explicitement la méthode 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')

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant.

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

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