Python Language collections.ChainMap


Exemple

ChainMap est nouveau dans la version 3.3

Renvoie un nouvel objet ChainMap plusieurs maps . Cet objet regroupe plusieurs dicts ou autres mappages pour créer une seule vue pouvant être mise à jour.

ChainMap s sont utiles pour gérer les contextes et les superpositions imbriqués. Un exemple dans le monde python se trouve dans l'implémentation de la classe Context dans le moteur de template de Django. Il est utile pour lier rapidement un certain nombre de mappages afin que le résultat puisse être traité comme une seule unité. Il est souvent beaucoup plus rapide que de créer un nouveau dictionnaire et d'exécuter plusieurs appels update() .

Chaque fois que l'on a une chaîne de valeurs de recherche, il peut y avoir un cas pour ChainMap . Un exemple consiste à avoir à la fois des valeurs spécifiées par l'utilisateur et un dictionnaire de valeurs par défaut. Un autre exemple est celui des cartes de paramètres POST et GET trouvées dans l'utilisation du Web, par exemple Django ou Flask. En utilisant ChainMap on renvoie une vue combinée de deux dictionnaires distincts.

La liste des paramètres des maps est triée de la première recherche à la dernière recherche. Les recherches recherchent les mappages sous-jacents successivement jusqu'à ce qu'une clé soit trouvée. En revanche, les écritures, les mises à jour et les suppressions ne fonctionnent que sur le premier mappage.

import collections

# define two dictionaries with at least some keys overlapping.
dict1 = {'apple': 1, 'banana': 2}
dict2 = {'coconut': 1, 'date': 1, 'apple': 3}

# create two ChainMaps with different ordering of those dicts.
combined_dict = collections.ChainMap(dict1, dict2)
reverse_ordered_dict = collections.ChainMap(dict2, dict1)

Notez l'impact de l'ordre sur lequel la valeur est trouvée en premier dans la recherche ultérieure

for k, v in combined_dict.items():
    print(k, v)
    
date 1
apple 1
banana 2
coconut 1

for k, v in reverse_ordered_dict.items():
    print(k, v)

date 1
apple 3
banana 2
coconut 1