Was ist der Zweck der Sammlungen.ChainMap?

In Python 3.3 ChainMap - Klasse wurde Hinzugefügt, um die Sammlungen Modul:

Einen ChainMap Klasse wird bereitgestellt, um schnell verknüpfen eine Anzahl von Zuordnungen
so können Sie als eine Einheit behandelt. Es ist oft viel schneller als
erstellen eines neuen Wörterbuchs und läuft mehrere update () - Aufrufe.

Beispiel:

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

Es wurde motiviert durch dieses Problem und öffentlich gemacht diese eine (keine PEP erstellt wurde).

Soweit ich das verstanden habe, ist es eine alternative, um ein zusätzliches Wörterbuch und Pflege es mit update()s.

Die Fragen:

  • Was nützt Fällen nicht ChainMap cover?
  • Gibt es irgendwelche realen Welt Beispiele von ChainMap?
  • Ist es in third-party-Bibliotheken, die eingeschaltet, um Python ist3?

Bonus-Frage: gibt es eine Möglichkeit, es zu benutzen auf Python2.x?


Ich habe gehört, über die es in Transformieren-Code in Schöne, Idiomatische Python PyCon Vortrag von Raymond Hettinger, und ich möchte hinzufügen, dass es mein toolkit, aber mir fehlt im das Verständnis, Wann sollte ich es verwenden.

  • Ich bin auch versucht, die Lücke zu füllen: es gibt Fragen, defaultdict, namedtuple...aber es gibt keine über ChainMap. Also, für mich ist dies ein Weg, um einen Beitrag auch. Vielen Dank im Voraus.
  • Jedes mal, wenn Sie aktualisieren müssen Sie eine Zuordnung und möglicherweise umkehren möchten Sie diese updates ist die perfekte Zeit.
  • Real-world use-case: die GET und POST parameter-mappings in ein web-framework, bietet eine kombinierte Sicht auf zwei unterschiedliche und separate Wörterbücher.
  • Wie für die Verwendung in 2.x, die Quellcode wie es aussieht, könnte möglicherweise Nur Funktioniert, allerdings habe ich nicht versucht
  • FWIW, es gibt einen Vorläufer bereits in Python2.7: from ConfigParser import _ChainMap as ChainMap.
  • danke für die nette und hilfreiche Kommentare und für die ChainMap selbst. Sie hätte eine gute Antwort aus der Kette der Kommentare 🙂
  • wenn Sie möchten, zu importieren 2.7 wie Raymond schon sagt, es ist eigentlich _Chainmap (beachten Sie die groß-und Kleinschreibung m)
  • guter Fang, danke!

InformationsquelleAutor alecxe | 2014-04-30
Schreibe einen Kommentar