Quel est l'objet de collections.ChainMap?

En Python 3.3 un ChainMap classe a été ajoutée à la collections module:

Un ChainMap classe est fourni pour rapidement reliant un certain nombre de correspondances
de sorte qu'ils peuvent être traités comme une seule unité. Il est souvent beaucoup plus rapide que
la création d'un nouveau dictionnaire et l'exécution de plusieurs mise à jour() appelle.

Exemple:

>>> from collections import ChainMap
>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 10, 'c': 11}
>>> z = ChainMap(y, x)
>>> for k, v in z.items():
        print(k, v)
a 1
c 11
b 10

Elle a été motivée par ce problème et rendu public par cette une (pas de PEP a été créé).

Comme je le comprends, c'est une alternative à avoir un autre dictionnaire et de le maintenir avec update()s.

Les questions sont:

  • Ce cas d'utilisation ne ChainMap couvrir?
  • Existe-il des exemples du monde réel de ChainMap?
  • Est-il utilisé dans les bibliothèques de tiers qui a changé pour python3?

Question Bonus: est-il un moyen de l'utiliser sur Python2.x?


J'ai entendu parler d'elle dans Transformer le Code en de Beaux Idiomatiques Python PyCon parler par Raymond Hettinger et j'aimerais ajouter à ma trousse à outils, mais je manque de compréhension quand dois-je utiliser.

  • Je suis aussi en train d'essayer de combler le fossé: il y a des questions à propos de defaultdict, namedtuple...mais il n'est pas sur ChainMap. Donc, pour moi, c'est une façon de contribuer également. Merci à l'avance.
  • Tout moment vous avez besoin de mettre à jour une cartographie, et pourrait vouloir inverser ces mises à jour est un temps parfait.
  • Dans le monde réel de cas d'utilisation: GET et POST mappages des paramètres dans un framework web, offrant une vue combinée sur deux distinctes et séparées des dictionnaires.
  • Comme pour l'utilisation en 2.x, le code source ressemble à cela pourrait peut-être Juste, même si je n'ai pas essayé
  • FWIW, il est un précurseur déjà en Python2.7: from ConfigParser import _ChainMap as ChainMap.
  • merci pour la belle et utile, les commentaires et pour le ChainMap lui-même. Vous pourriez avoir pris une bonne réponse de la chaîne de commentaires 🙂
  • si vous souhaitez importer dans 2,7 comme Raymond suggère, c'est en fait _Chainmap (note de la capitalisation de m)
  • bonne prise, merci!

InformationsquelleAutor alecxe | 2014-04-30