[PYTHON] Principales caractéristiques de ChainMap

À partir de Python 3.3, une classe appelée ChainMap dans la bibliothèque standard des collections est disponible, mais j'écrirai les principales fonctionnalités dans un mémorandum.

ChainMap est utilisé pour collecter plusieurs dictionnaires pour créer un dictionnaire.

Pour faire de même avec dict, fusionnez plusieurs dictionnaires et incluez les éléments des dictionnaires originaux, comme décrit dans cet article. Je pense que je vais créer un nouveau dictionnaire.

ChainMap, d'autre part, ne copie pas les éléments dans le nouvel objet, mais conserve le dictionnaire d'origine comme référence, vous n'avez donc pas à mettre à jour l'objet ChainMap si le dictionnaire d'origine change.

Par exemple, considérez l'exemple suivant.

python


from collections import ChainMap

d1 = {'A': 1, 'B':2}
d2 = {'C': 3, 'D':4}

cm = ChainMap(d1, d2)

Maintenant, si vous ajoutez un élément à d1, vous pouvez voir que vous pouvez également obtenir cet élément avec cm.

python


>>> d1['E'] = 5
>>> cm['E']
5

Vous pouvez obtenir le dictionnaire d'origine avec la propriété maps.

python


>>> cm.maps
[{'E': 5, 'B': 2, 'A': 1}, {'D': 4, 'C': 3}]

S'il existe des clés en double entre les dictionnaires d'origine, l'élément du dictionnaire précédent est prioritaire.

python


>>> d1['D'] = 6
>>> cm.maps
[{'E': 5, 'B': 2, 'A': 1, 'D': 6}, {'D': 4, 'C': 3}]
>>> cm['D']
6

De plus, le dictionnaire d'origine n'est pas limité à l'objet dict intégré, mais un objet Mapping peut être spécifié. L'exemple suivant utilise ʻUserDict` dans la même bibliothèque standard pour le dictionnaire source.

python


from collections import UserDict

class MyDict(UserDict):

    def __getitem__(self, key):
        if key not in self.data:
            return 'Not found'
        else:
            return self.data[key]

md1 = MyDict(d1)
md2 = MyDict(d2)

cm2 = ChainMap(md1, md2)

Dans cet exemple, même si «md2» a la clé «C», «Not found» est renvoyé car «getitem» de «md1» est appelé en premier.

python


>>> cm2['C']
'Not found'

Recommended Posts

Principales caractéristiques de ChainMap
Caractéristiques du langage Go
Caractéristiques du langage de programmation [Memo]
À propos des fonctionnalités de Python
Train_test_split du montant de fonction détenu par dict
Caractéristiques de pd.NA dans Pandas 1.0.0 (RC0)
Maîtrisez les riches fonctionnalités d'IPython
Maîtriser les riches fonctionnalités d'IPython (2)
Caractéristiques du lien symbolique et dur
Visualisation de corrélation entre la quantité de caractéristiques et la variable objective
[Principes de base de Python] Pourquoi __name__ == "__main__"