À 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