| Raymond Hettinger | 53dbe39 | 2008-02-12 20:03:09 +0000 | [diff] [blame] | 1 | :mod:`collections` --- Container datatypes | 
|  | 2 | ========================================== | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 3 |  | 
|  | 4 | .. module:: collections | 
| Raymond Hettinger | 53dbe39 | 2008-02-12 20:03:09 +0000 | [diff] [blame] | 5 | :synopsis: Container datatypes | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 6 | .. moduleauthor:: Raymond Hettinger <python@rcn.com> | 
|  | 7 | .. sectionauthor:: Raymond Hettinger <python@rcn.com> | 
|  | 8 |  | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 9 | .. testsetup:: * | 
|  | 10 |  | 
|  | 11 | from collections import * | 
|  | 12 | import itertools | 
|  | 13 | __name__ = '<doctest>' | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 14 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 15 | This module implements high-performance container datatypes.  Currently, | 
| Raymond Hettinger | 2d32f63 | 2009-03-02 21:24:57 +0000 | [diff] [blame] | 16 | there are four datatypes, :class:`Counter`, :class:`deque`, :class:`OrderedDict` and | 
| Raymond Hettinger | acd82b9 | 2009-02-17 20:06:51 +0000 | [diff] [blame] | 17 | :class:`defaultdict`, and one datatype factory function, :func:`namedtuple`. | 
| Christian Heimes | 0bd4e11 | 2008-02-12 22:59:25 +0000 | [diff] [blame] | 18 |  | 
| Raymond Hettinger | ebcee3f | 2008-02-06 19:54:00 +0000 | [diff] [blame] | 19 | The specialized containers provided in this module provide alternatives | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 20 | to Python's general purpose built-in containers, :class:`dict`, | 
| Raymond Hettinger | ebcee3f | 2008-02-06 19:54:00 +0000 | [diff] [blame] | 21 | :class:`list`, :class:`set`, and :class:`tuple`. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 22 |  | 
| Mark Summerfield | 08898b4 | 2007-09-05 08:43:04 +0000 | [diff] [blame] | 23 | In addition to containers, the collections module provides some ABCs | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 24 | (abstract base classes) that can be used to test whether a class | 
| Raymond Hettinger | acd82b9 | 2009-02-17 20:06:51 +0000 | [diff] [blame] | 25 | provides a particular interface, for example, whether it is hashable or | 
|  | 26 | a mapping. | 
| Raymond Hettinger | ebcee3f | 2008-02-06 19:54:00 +0000 | [diff] [blame] | 27 |  | 
|  | 28 | ABCs - abstract base classes | 
|  | 29 | ---------------------------- | 
|  | 30 |  | 
|  | 31 | The collections module offers the following ABCs: | 
| Mark Summerfield | 08898b4 | 2007-09-05 08:43:04 +0000 | [diff] [blame] | 32 |  | 
| Georg Brandl | 86b2fb9 | 2008-07-16 03:43:04 +0000 | [diff] [blame] | 33 | =========================  =====================  ======================  ==================================================== | 
|  | 34 | ABC                        Inherits               Abstract Methods        Mixin Methods | 
|  | 35 | =========================  =====================  ======================  ==================================================== | 
|  | 36 | :class:`Container`                                ``__contains__`` | 
|  | 37 | :class:`Hashable`                                 ``__hash__`` | 
|  | 38 | :class:`Iterable`                                 ``__iter__`` | 
|  | 39 | :class:`Iterator`          :class:`Iterable`      ``__next__``            ``__iter__`` | 
| Georg Brandl | a1c6a1c | 2009-01-03 21:26:05 +0000 | [diff] [blame] | 40 | :class:`Sized`                                    ``__len__`` | 
| Georg Brandl | 86b2fb9 | 2008-07-16 03:43:04 +0000 | [diff] [blame] | 41 | :class:`Callable`                                 ``__call__`` | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 42 |  | 
| Georg Brandl | 86b2fb9 | 2008-07-16 03:43:04 +0000 | [diff] [blame] | 43 | :class:`Sequence`          :class:`Sized`,        ``__getitem__``         ``__contains__``. ``__iter__``, ``__reversed__``. | 
| Raymond Hettinger | d23e013 | 2009-01-29 00:01:27 +0000 | [diff] [blame] | 44 | :class:`Iterable`,                             ``index``, and ``count`` | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 45 | :class:`Container` | 
|  | 46 |  | 
| Raymond Hettinger | d23e013 | 2009-01-29 00:01:27 +0000 | [diff] [blame] | 47 | :class:`MutableSequence`   :class:`Sequence`      ``__setitem__``         Inherited Sequence methods and | 
| Georg Brandl | 86b2fb9 | 2008-07-16 03:43:04 +0000 | [diff] [blame] | 48 | ``__delitem__``,        ``append``, ``reverse``, ``extend``, ``pop``, | 
| Raymond Hettinger | d23e013 | 2009-01-29 00:01:27 +0000 | [diff] [blame] | 49 | and ``insert``          ``remove``, and ``__iadd__`` | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 50 |  | 
| Raymond Hettinger | d23e013 | 2009-01-29 00:01:27 +0000 | [diff] [blame] | 51 | :class:`Set`               :class:`Sized`,                                ``__le__``, ``__lt__``, ``__eq__``, ``__ne__``, | 
|  | 52 | :class:`Iterable`,                             ``__gt__``, ``__ge__``, ``__and__``, ``__or__`` | 
|  | 53 | :class:`Container`                             ``__sub__``, ``__xor__``, and ``isdisjoint`` | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 54 |  | 
| Georg Brandl | 86b2fb9 | 2008-07-16 03:43:04 +0000 | [diff] [blame] | 55 | :class:`MutableSet`        :class:`Set`           ``add`` and             Inherited Set methods and | 
|  | 56 | ``discard``             ``clear``, ``pop``, ``remove``, ``__ior__``, | 
|  | 57 | ``__iand__``, ``__ixor__``, and ``__isub__`` | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 58 |  | 
| Raymond Hettinger | d23e013 | 2009-01-29 00:01:27 +0000 | [diff] [blame] | 59 | :class:`Mapping`           :class:`Sized`,        ``__getitem__``         ``__contains__``, ``keys``, ``items``, ``values``, | 
|  | 60 | :class:`Iterable`,                             ``get``, ``__eq__``, and ``__ne__`` | 
|  | 61 | :class:`Container` | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 62 |  | 
| Raymond Hettinger | d23e013 | 2009-01-29 00:01:27 +0000 | [diff] [blame] | 63 | :class:`MutableMapping`    :class:`Mapping`       ``__setitem__`` and     Inherited Mapping methods and | 
|  | 64 | ``__delitem__``         ``pop``, ``popitem``, ``clear``, ``update``, | 
|  | 65 | and ``setdefault`` | 
|  | 66 |  | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 67 |  | 
| Georg Brandl | 86b2fb9 | 2008-07-16 03:43:04 +0000 | [diff] [blame] | 68 | :class:`MappingView`       :class:`Sized`                                 ``__len__`` | 
|  | 69 | :class:`KeysView`          :class:`MappingView`,                          ``__contains__``, | 
|  | 70 | :class:`Set`                                   ``__iter__`` | 
|  | 71 | :class:`ItemsView`         :class:`MappingView`,                          ``__contains__``, | 
|  | 72 | :class:`Set`                                   ``__iter__`` | 
|  | 73 | :class:`ValuesView`        :class:`MappingView`                           ``__contains__``, ``__iter__`` | 
|  | 74 | =========================  =====================  ======================  ==================================================== | 
| Mark Summerfield | 08898b4 | 2007-09-05 08:43:04 +0000 | [diff] [blame] | 75 |  | 
| Mark Summerfield | 08898b4 | 2007-09-05 08:43:04 +0000 | [diff] [blame] | 76 | These ABCs allow us to ask classes or instances if they provide | 
|  | 77 | particular functionality, for example:: | 
|  | 78 |  | 
| Mark Summerfield | 08898b4 | 2007-09-05 08:43:04 +0000 | [diff] [blame] | 79 | size = None | 
| Raymond Hettinger | ebcee3f | 2008-02-06 19:54:00 +0000 | [diff] [blame] | 80 | if isinstance(myvar, collections.Sized): | 
| Georg Brandl | a1c6a1c | 2009-01-03 21:26:05 +0000 | [diff] [blame] | 81 | size = len(myvar) | 
| Mark Summerfield | 08898b4 | 2007-09-05 08:43:04 +0000 | [diff] [blame] | 82 |  | 
| Raymond Hettinger | ebcee3f | 2008-02-06 19:54:00 +0000 | [diff] [blame] | 83 | Several of the ABCs are also useful as mixins that make it easier to develop | 
|  | 84 | classes supporting container APIs.  For example, to write a class supporting | 
|  | 85 | the full :class:`Set` API, it only necessary to supply the three underlying | 
|  | 86 | abstract methods: :meth:`__contains__`, :meth:`__iter__`, and :meth:`__len__`. | 
|  | 87 | The ABC supplies the remaining methods such as :meth:`__and__` and | 
|  | 88 | :meth:`isdisjoint` :: | 
|  | 89 |  | 
|  | 90 | class ListBasedSet(collections.Set): | 
| Raymond Hettinger | c1b6a4a | 2008-02-08 23:46:23 +0000 | [diff] [blame] | 91 | ''' Alternate set implementation favoring space over speed | 
|  | 92 | and not requiring the set elements to be hashable. ''' | 
| Raymond Hettinger | ebcee3f | 2008-02-06 19:54:00 +0000 | [diff] [blame] | 93 | def __init__(self, iterable): | 
| Raymond Hettinger | c1b6a4a | 2008-02-08 23:46:23 +0000 | [diff] [blame] | 94 | self.elements = lst = [] | 
|  | 95 | for value in iterable: | 
|  | 96 | if value not in lst: | 
|  | 97 | lst.append(value) | 
| Raymond Hettinger | ebcee3f | 2008-02-06 19:54:00 +0000 | [diff] [blame] | 98 | def __iter__(self): | 
|  | 99 | return iter(self.elements) | 
|  | 100 | def __contains__(self, value): | 
|  | 101 | return value in self.elements | 
|  | 102 | def __len__(self): | 
|  | 103 | return len(self.elements) | 
|  | 104 |  | 
|  | 105 | s1 = ListBasedSet('abcdef') | 
|  | 106 | s2 = ListBasedSet('defghi') | 
|  | 107 | overlap = s1 & s2            # The __and__() method is supported automatically | 
|  | 108 |  | 
| Raymond Hettinger | 7aebb64 | 2008-02-09 03:25:08 +0000 | [diff] [blame] | 109 | Notes on using :class:`Set` and :class:`MutableSet` as a mixin: | 
|  | 110 |  | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 111 | (1) | 
| Raymond Hettinger | 7aebb64 | 2008-02-09 03:25:08 +0000 | [diff] [blame] | 112 | Since some set operations create new sets, the default mixin methods need | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 113 | a way to create new instances from an iterable. The class constructor is | 
|  | 114 | assumed to have a signature in the form ``ClassName(iterable)``. | 
| Benjamin Peterson | 2b7411d | 2008-05-26 17:36:47 +0000 | [diff] [blame] | 115 | That assumption is factored-out to an internal classmethod called | 
| Raymond Hettinger | 7aebb64 | 2008-02-09 03:25:08 +0000 | [diff] [blame] | 116 | :meth:`_from_iterable` which calls ``cls(iterable)`` to produce a new set. | 
|  | 117 | If the :class:`Set` mixin is being used in a class with a different | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 118 | constructor signature, you will need to override :meth:`from_iterable` | 
|  | 119 | with a classmethod that can construct new instances from | 
| Raymond Hettinger | 7aebb64 | 2008-02-09 03:25:08 +0000 | [diff] [blame] | 120 | an iterable argument. | 
|  | 121 |  | 
|  | 122 | (2) | 
|  | 123 | To override the comparisons (presumably for speed, as the | 
|  | 124 | semantics are fixed), redefine :meth:`__le__` and | 
|  | 125 | then the other operations will automatically follow suit. | 
| Raymond Hettinger | ebcee3f | 2008-02-06 19:54:00 +0000 | [diff] [blame] | 126 |  | 
| Raymond Hettinger | 0dbdab2 | 2008-02-09 03:48:16 +0000 | [diff] [blame] | 127 | (3) | 
|  | 128 | The :class:`Set` mixin provides a :meth:`_hash` method to compute a hash value | 
|  | 129 | for the set; however, :meth:`__hash__` is not defined because not all sets | 
|  | 130 | are hashable or immutable.  To add set hashabilty using mixins, | 
|  | 131 | inherit from both :meth:`Set` and :meth:`Hashable`, then define | 
|  | 132 | ``__hash__ = Set._hash``. | 
|  | 133 |  | 
| Raymond Hettinger | be075b1 | 2009-03-20 18:33:06 +0000 | [diff] [blame] | 134 | .. seealso:: | 
|  | 135 |  | 
|  | 136 | * `OrderedSet recipe <http://code.activestate.com/recipes/576694/>`_ for an | 
|  | 137 | example built on :class:`MutableSet`. | 
|  | 138 |  | 
|  | 139 | * For more about ABCs, see the :mod:`abc` module and :pep:`3119`. | 
| Mark Summerfield | 08898b4 | 2007-09-05 08:43:04 +0000 | [diff] [blame] | 140 |  | 
|  | 141 |  | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 142 | :class:`Counter` objects | 
|  | 143 | ------------------------ | 
|  | 144 |  | 
|  | 145 | A counter tool is provided to support convenient and rapid tallies. | 
|  | 146 | For example:: | 
|  | 147 |  | 
| Raymond Hettinger | 1c62dc9 | 2009-02-04 11:41:45 +0000 | [diff] [blame] | 148 | >>> # Tally occurrences of words in a list | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 149 | >>> cnt = Counter() | 
| Raymond Hettinger | 670eaec | 2009-01-21 23:14:07 +0000 | [diff] [blame] | 150 | >>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']: | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 151 | ...     cnt[word] += 1 | 
|  | 152 | >>> cnt | 
|  | 153 | Counter({'blue': 3, 'red': 2, 'green': 1}) | 
|  | 154 |  | 
| Raymond Hettinger | 1c62dc9 | 2009-02-04 11:41:45 +0000 | [diff] [blame] | 155 | >>> # Find the ten most common words in Hamlet | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 156 | >>> import re | 
|  | 157 | >>> words = re.findall('\w+', open('hamlet.txt').read().lower()) | 
| Raymond Hettinger | 0bae662 | 2009-01-20 13:00:59 +0000 | [diff] [blame] | 158 | >>> Counter(words).most_common(10) | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 159 | [('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631), | 
|  | 160 | ('you', 554),  ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)] | 
|  | 161 |  | 
|  | 162 | .. class:: Counter([iterable-or-mapping]) | 
|  | 163 |  | 
| Raymond Hettinger | 670eaec | 2009-01-21 23:14:07 +0000 | [diff] [blame] | 164 | A :class:`Counter` is a :class:`dict` subclass for counting hashable objects. | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 165 | It is an unordered collection where elements are stored as dictionary keys | 
|  | 166 | and their counts are stored as dictionary values.  Counts are allowed to be | 
|  | 167 | any integer value including zero or negative counts.  The :class:`Counter` | 
|  | 168 | class is similar to bags or multisets in other languages. | 
|  | 169 |  | 
|  | 170 | Elements are counted from an *iterable* or initialized from another | 
| Benjamin Peterson | 25c95f1 | 2009-05-08 20:42:26 +0000 | [diff] [blame] | 171 | *mapping* (or counter): | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 172 |  | 
| Raymond Hettinger | 73662a5 | 2009-01-27 02:38:22 +0000 | [diff] [blame] | 173 | >>> c = Counter()                           # a new, empty counter | 
|  | 174 | >>> c = Counter('gallahad')                 # a new counter from an iterable | 
|  | 175 | >>> c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping | 
|  | 176 | >>> c = Counter(cats=4, dogs=8)             # a new counter from keyword args | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 177 |  | 
| Raymond Hettinger | 670eaec | 2009-01-21 23:14:07 +0000 | [diff] [blame] | 178 | Counter objects have a dictionary interface except that they return a zero | 
| Benjamin Peterson | 25c95f1 | 2009-05-08 20:42:26 +0000 | [diff] [blame] | 179 | count for missing items instead of raising a :exc:`KeyError`: | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 180 |  | 
| Raymond Hettinger | 94adc8e | 2009-01-22 05:27:37 +0000 | [diff] [blame] | 181 | >>> c = Counter(['eggs', 'ham']) | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 182 | >>> c['bacon']                              # count of a missing element is zero | 
|  | 183 | 0 | 
|  | 184 |  | 
| Raymond Hettinger | 94adc8e | 2009-01-22 05:27:37 +0000 | [diff] [blame] | 185 | Setting a count to zero does not remove an element from a counter. | 
|  | 186 | Use ``del`` to remove it entirely: | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 187 |  | 
| Raymond Hettinger | 94adc8e | 2009-01-22 05:27:37 +0000 | [diff] [blame] | 188 | >>> c['sausage'] = 0                        # counter entry with a zero count | 
|  | 189 | >>> del c['sausage']                        # del actually removes the entry | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 190 |  | 
| Benjamin Peterson | d45bf58 | 2009-03-02 21:44:54 +0000 | [diff] [blame] | 191 | .. versionadded:: 3.1 | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 192 |  | 
|  | 193 |  | 
|  | 194 | Counter objects support two methods beyond those available for all | 
|  | 195 | dictionaries: | 
|  | 196 |  | 
|  | 197 | .. method:: elements() | 
|  | 198 |  | 
| Raymond Hettinger | 670eaec | 2009-01-21 23:14:07 +0000 | [diff] [blame] | 199 | Return an iterator over elements repeating each as many times as its | 
|  | 200 | count.  Elements are returned in arbitrary order.  If an element's count | 
|  | 201 | is less than one, :meth:`elements` will ignore it. | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 202 |  | 
| Raymond Hettinger | 0bae662 | 2009-01-20 13:00:59 +0000 | [diff] [blame] | 203 | >>> c = Counter(a=4, b=2, c=0, d=-2) | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 204 | >>> list(c.elements()) | 
|  | 205 | ['a', 'a', 'a', 'a', 'b', 'b'] | 
|  | 206 |  | 
|  | 207 | .. method:: most_common([n]) | 
|  | 208 |  | 
| Raymond Hettinger | 73662a5 | 2009-01-27 02:38:22 +0000 | [diff] [blame] | 209 | Return a list of the *n* most common elements and their counts from the | 
| Raymond Hettinger | d04fa31 | 2009-02-04 19:45:13 +0000 | [diff] [blame] | 210 | most common to the least.  If *n* is not specified, :func:`most_common` | 
| Raymond Hettinger | 73662a5 | 2009-01-27 02:38:22 +0000 | [diff] [blame] | 211 | returns *all* elements in the counter.  Elements with equal counts are | 
| Benjamin Peterson | 25c95f1 | 2009-05-08 20:42:26 +0000 | [diff] [blame] | 212 | ordered arbitrarily: | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 213 |  | 
|  | 214 | >>> Counter('abracadabra').most_common(3) | 
|  | 215 | [('a', 5), ('r', 2), ('b', 2)] | 
|  | 216 |  | 
| Raymond Hettinger | 670eaec | 2009-01-21 23:14:07 +0000 | [diff] [blame] | 217 | The usual dictionary methods are available for :class:`Counter` objects | 
|  | 218 | except for two which work differently for counters. | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 219 |  | 
|  | 220 | .. method:: fromkeys(iterable) | 
|  | 221 |  | 
| Raymond Hettinger | 73662a5 | 2009-01-27 02:38:22 +0000 | [diff] [blame] | 222 | This class method is not implemented for :class:`Counter` objects. | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 223 |  | 
|  | 224 | .. method:: update([iterable-or-mapping]) | 
|  | 225 |  | 
| Raymond Hettinger | 73662a5 | 2009-01-27 02:38:22 +0000 | [diff] [blame] | 226 | Elements are counted from an *iterable* or added-in from another | 
|  | 227 | *mapping* (or counter).  Like :meth:`dict.update` but adds counts | 
|  | 228 | instead of replacing them.  Also, the *iterable* is expected to be a | 
|  | 229 | sequence of elements, not a sequence of ``(key, value)`` pairs. | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 230 |  | 
|  | 231 | Common patterns for working with :class:`Counter` objects:: | 
|  | 232 |  | 
| Raymond Hettinger | 73662a5 | 2009-01-27 02:38:22 +0000 | [diff] [blame] | 233 | sum(c.values())                 # total of all counts | 
|  | 234 | c.clear()                       # reset all counts | 
|  | 235 | list(c)                         # list unique elements | 
|  | 236 | set(c)                          # convert to a set | 
|  | 237 | dict(c)                         # convert to a regular dictionary | 
|  | 238 | c.items()                       # convert to a list of (elem, cnt) pairs | 
|  | 239 | Counter(dict(list_of_pairs))    # convert from a list of (elem, cnt) pairs | 
|  | 240 | c.most_common()[:-n:-1]         # n least common elements | 
|  | 241 | c += Counter()                  # remove zero and negative counts | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 242 |  | 
| Raymond Hettinger | 72a95cc | 2009-02-25 22:51:40 +0000 | [diff] [blame] | 243 | Several mathematical operations are provided for combining :class:`Counter` | 
|  | 244 | objects to produce multisets (counters that have counts greater than zero). | 
|  | 245 | Addition and subtraction combine counters by adding or subtracting the counts | 
|  | 246 | of corresponding elements.  Intersection and union return the minimum and | 
|  | 247 | maximum of corresponding counts.  Each operation can accept inputs with signed | 
|  | 248 | counts, but the output will exclude results with counts of zero or less. | 
| Raymond Hettinger | 4d2073a | 2009-01-20 03:41:22 +0000 | [diff] [blame] | 249 |  | 
| Raymond Hettinger | e0d1b9f | 2009-01-21 20:36:27 +0000 | [diff] [blame] | 250 | >>> c = Counter(a=3, b=1) | 
|  | 251 | >>> d = Counter(a=1, b=2) | 
| Raymond Hettinger | 73662a5 | 2009-01-27 02:38:22 +0000 | [diff] [blame] | 252 | >>> c + d                       # add two counters together:  c[x] + d[x] | 
| Raymond Hettinger | 4d2073a | 2009-01-20 03:41:22 +0000 | [diff] [blame] | 253 | Counter({'a': 4, 'b': 3}) | 
| Raymond Hettinger | 73662a5 | 2009-01-27 02:38:22 +0000 | [diff] [blame] | 254 | >>> c - d                       # subtract (keeping only positive counts) | 
| Raymond Hettinger | 4d2073a | 2009-01-20 03:41:22 +0000 | [diff] [blame] | 255 | Counter({'a': 2}) | 
| Raymond Hettinger | 73662a5 | 2009-01-27 02:38:22 +0000 | [diff] [blame] | 256 | >>> c & d                       # intersection:  min(c[x], d[x]) | 
| Raymond Hettinger | 4d2073a | 2009-01-20 03:41:22 +0000 | [diff] [blame] | 257 | Counter({'a': 1, 'b': 1}) | 
| Raymond Hettinger | 73662a5 | 2009-01-27 02:38:22 +0000 | [diff] [blame] | 258 | >>> c | d                       # union:  max(c[x], d[x]) | 
| Raymond Hettinger | 4d2073a | 2009-01-20 03:41:22 +0000 | [diff] [blame] | 259 | Counter({'a': 3, 'b': 2}) | 
|  | 260 |  | 
| Raymond Hettinger | 4c4d3b1 | 2010-04-12 21:47:14 +0000 | [diff] [blame] | 261 | .. note:: | 
|  | 262 |  | 
|  | 263 | Counters were primarily designed to work with positive integers to represent | 
|  | 264 | running counts; however, care was taken to not unnecessarily preclude use | 
|  | 265 | cases needing other types or negative values.  To help with those use cases, | 
|  | 266 | this section documents the minimum range and type restrictions. | 
|  | 267 |  | 
|  | 268 | * The :class:`Counter` class itself is a dictionary subclass with no | 
|  | 269 | restrictions on its keys and values.  The values are intended to be numbers | 
|  | 270 | representing counts, but you *could* store anything in the value field. | 
|  | 271 |  | 
|  | 272 | * The :meth:`most_common` method requires only that the values be orderable. | 
|  | 273 |  | 
|  | 274 | * For in-place operations such as ``c[key] += 1``, the value type need only | 
|  | 275 | support addition and subtraction.  So fractions, floats, and decimals would | 
|  | 276 | work and negative values are supported.  The same is also true for | 
|  | 277 | :meth:`update` and :meth:`subtract` which allow negative and zero values | 
|  | 278 | for both inputs and outputs. | 
|  | 279 |  | 
|  | 280 | * The multiset methods are designed only for use cases with positive values. | 
|  | 281 | The inputs may be negative or zero, but only outputs with positive values | 
|  | 282 | are created.  There are no type restrictions, but the value type needs to | 
|  | 283 | support support addition, subtraction, and comparison. | 
|  | 284 |  | 
|  | 285 | * The :meth:`elements` method requires integer counts.  It ignores zero and | 
|  | 286 | negative counts. | 
|  | 287 |  | 
| Raymond Hettinger | b14043c | 2009-01-20 23:44:31 +0000 | [diff] [blame] | 288 | .. seealso:: | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 289 |  | 
| Raymond Hettinger | 94adc8e | 2009-01-22 05:27:37 +0000 | [diff] [blame] | 290 | * `Counter class <http://code.activestate.com/recipes/576611/>`_ | 
|  | 291 | adapted for Python 2.5 and an early `Bag recipe | 
|  | 292 | <http://code.activestate.com/recipes/259174/>`_ for Python 2.4. | 
|  | 293 |  | 
| Raymond Hettinger | b14043c | 2009-01-20 23:44:31 +0000 | [diff] [blame] | 294 | * `Bag class <http://www.gnu.org/software/smalltalk/manual-base/html_node/Bag.html>`_ | 
|  | 295 | in Smalltalk. | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 296 |  | 
| Raymond Hettinger | b14043c | 2009-01-20 23:44:31 +0000 | [diff] [blame] | 297 | * Wikipedia entry for `Multisets <http://en.wikipedia.org/wiki/Multiset>`_\. | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 298 |  | 
| Raymond Hettinger | b14043c | 2009-01-20 23:44:31 +0000 | [diff] [blame] | 299 | * `C++ multisets <http://www.demo2s.com/Tutorial/Cpp/0380__set-multiset/Catalog0380__set-multiset.htm>`_ | 
| Raymond Hettinger | 94adc8e | 2009-01-22 05:27:37 +0000 | [diff] [blame] | 300 | tutorial with examples. | 
| Raymond Hettinger | b14043c | 2009-01-20 23:44:31 +0000 | [diff] [blame] | 301 |  | 
| Raymond Hettinger | 94adc8e | 2009-01-22 05:27:37 +0000 | [diff] [blame] | 302 | * For mathematical operations on multisets and their use cases, see | 
| Raymond Hettinger | b14043c | 2009-01-20 23:44:31 +0000 | [diff] [blame] | 303 | *Knuth, Donald. The Art of Computer Programming Volume II, | 
|  | 304 | Section 4.6.3, Exercise 19*\. | 
|  | 305 |  | 
| Raymond Hettinger | 670eaec | 2009-01-21 23:14:07 +0000 | [diff] [blame] | 306 | * To enumerate all distinct multisets of a given size over a given set of | 
| Raymond Hettinger | d07d939 | 2009-01-27 04:20:44 +0000 | [diff] [blame] | 307 | elements, see :func:`itertools.combinations_with_replacement`. | 
| Raymond Hettinger | b14043c | 2009-01-20 23:44:31 +0000 | [diff] [blame] | 308 |  | 
| Raymond Hettinger | 94adc8e | 2009-01-22 05:27:37 +0000 | [diff] [blame] | 309 | map(Counter, combinations_with_replacement('ABC', 2)) --> AA AB AC BB BC CC | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 310 |  | 
|  | 311 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 312 | :class:`deque` objects | 
|  | 313 | ---------------------- | 
|  | 314 |  | 
| Georg Brandl | c2a4f4f | 2009-04-10 09:03:43 +0000 | [diff] [blame] | 315 | .. class:: deque([iterable, [maxlen]]) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 316 |  | 
|  | 317 | Returns a new deque object initialized left-to-right (using :meth:`append`) with | 
|  | 318 | data from *iterable*.  If *iterable* is not specified, the new deque is empty. | 
|  | 319 |  | 
|  | 320 | Deques are a generalization of stacks and queues (the name is pronounced "deck" | 
|  | 321 | and is short for "double-ended queue").  Deques support thread-safe, memory | 
|  | 322 | efficient appends and pops from either side of the deque with approximately the | 
|  | 323 | same O(1) performance in either direction. | 
|  | 324 |  | 
|  | 325 | Though :class:`list` objects support similar operations, they are optimized for | 
|  | 326 | fast fixed-length operations and incur O(n) memory movement costs for | 
|  | 327 | ``pop(0)`` and ``insert(0, v)`` operations which change both the size and | 
|  | 328 | position of the underlying data representation. | 
|  | 329 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 330 |  | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 331 | If *maxlen* is not specified or is *None*, deques may grow to an | 
|  | 332 | arbitrary length.  Otherwise, the deque is bounded to the specified maximum | 
|  | 333 | length.  Once a bounded length deque is full, when new items are added, a | 
|  | 334 | corresponding number of items are discarded from the opposite end.  Bounded | 
|  | 335 | length deques provide functionality similar to the ``tail`` filter in | 
|  | 336 | Unix. They are also useful for tracking transactions and other pools of data | 
|  | 337 | where only the most recent activity is of interest. | 
|  | 338 |  | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 339 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 340 | Deque objects support the following methods: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 341 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 342 | .. method:: append(x) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 343 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 344 | Add *x* to the right side of the deque. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 345 |  | 
|  | 346 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 347 | .. method:: appendleft(x) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 348 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 349 | Add *x* to the left side of the deque. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 350 |  | 
|  | 351 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 352 | .. method:: clear() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 353 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 354 | Remove all elements from the deque leaving it with length 0. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 355 |  | 
|  | 356 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 357 | .. method:: extend(iterable) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 358 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 359 | Extend the right side of the deque by appending elements from the iterable | 
|  | 360 | argument. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 361 |  | 
|  | 362 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 363 | .. method:: extendleft(iterable) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 364 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 365 | Extend the left side of the deque by appending elements from *iterable*. | 
|  | 366 | Note, the series of left appends results in reversing the order of | 
|  | 367 | elements in the iterable argument. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 368 |  | 
|  | 369 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 370 | .. method:: pop() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 371 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 372 | Remove and return an element from the right side of the deque. If no | 
|  | 373 | elements are present, raises an :exc:`IndexError`. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 374 |  | 
|  | 375 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 376 | .. method:: popleft() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 377 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 378 | Remove and return an element from the left side of the deque. If no | 
|  | 379 | elements are present, raises an :exc:`IndexError`. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 380 |  | 
|  | 381 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 382 | .. method:: remove(value) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 383 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 384 | Removed the first occurrence of *value*.  If not found, raises a | 
|  | 385 | :exc:`ValueError`. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 386 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 387 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 388 | .. method:: rotate(n) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 389 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 390 | Rotate the deque *n* steps to the right.  If *n* is negative, rotate to | 
|  | 391 | the left.  Rotating one step to the right is equivalent to: | 
|  | 392 | ``d.appendleft(d.pop())``. | 
|  | 393 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 394 |  | 
| Raymond Hettinger | 5bb0f0e | 2009-03-10 12:56:32 +0000 | [diff] [blame] | 395 | Deque objects also provide one read-only attribute: | 
|  | 396 |  | 
|  | 397 | .. attribute:: maxlen | 
|  | 398 |  | 
|  | 399 | Maximum size of a deque or *None* if unbounded. | 
|  | 400 |  | 
| Raymond Hettinger | 150fb9c | 2009-03-10 22:48:06 +0000 | [diff] [blame] | 401 | .. versionadded:: 3.1 | 
| Raymond Hettinger | 5bb0f0e | 2009-03-10 12:56:32 +0000 | [diff] [blame] | 402 |  | 
|  | 403 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 404 | In addition to the above, deques support iteration, pickling, ``len(d)``, | 
|  | 405 | ``reversed(d)``, ``copy.copy(d)``, ``copy.deepcopy(d)``, membership testing with | 
| Benjamin Peterson | 206e307 | 2008-10-19 14:07:49 +0000 | [diff] [blame] | 406 | the :keyword:`in` operator, and subscript references such as ``d[-1]``.  Indexed | 
|  | 407 | access is O(1) at both ends but slows to O(n) in the middle.  For fast random | 
|  | 408 | access, use lists instead. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 409 |  | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 410 | Example: | 
|  | 411 |  | 
|  | 412 | .. doctest:: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 413 |  | 
|  | 414 | >>> from collections import deque | 
|  | 415 | >>> d = deque('ghi')                 # make a new deque with three items | 
|  | 416 | >>> for elem in d:                   # iterate over the deque's elements | 
| Neal Norwitz | 752abd0 | 2008-05-13 04:55:24 +0000 | [diff] [blame] | 417 | ...     print(elem.upper()) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 418 | G | 
|  | 419 | H | 
|  | 420 | I | 
|  | 421 |  | 
|  | 422 | >>> d.append('j')                    # add a new entry to the right side | 
|  | 423 | >>> d.appendleft('f')                # add a new entry to the left side | 
|  | 424 | >>> d                                # show the representation of the deque | 
|  | 425 | deque(['f', 'g', 'h', 'i', 'j']) | 
|  | 426 |  | 
|  | 427 | >>> d.pop()                          # return and remove the rightmost item | 
|  | 428 | 'j' | 
|  | 429 | >>> d.popleft()                      # return and remove the leftmost item | 
|  | 430 | 'f' | 
|  | 431 | >>> list(d)                          # list the contents of the deque | 
|  | 432 | ['g', 'h', 'i'] | 
|  | 433 | >>> d[0]                             # peek at leftmost item | 
|  | 434 | 'g' | 
|  | 435 | >>> d[-1]                            # peek at rightmost item | 
|  | 436 | 'i' | 
|  | 437 |  | 
|  | 438 | >>> list(reversed(d))                # list the contents of a deque in reverse | 
|  | 439 | ['i', 'h', 'g'] | 
|  | 440 | >>> 'h' in d                         # search the deque | 
|  | 441 | True | 
|  | 442 | >>> d.extend('jkl')                  # add multiple elements at once | 
|  | 443 | >>> d | 
|  | 444 | deque(['g', 'h', 'i', 'j', 'k', 'l']) | 
|  | 445 | >>> d.rotate(1)                      # right rotation | 
|  | 446 | >>> d | 
|  | 447 | deque(['l', 'g', 'h', 'i', 'j', 'k']) | 
|  | 448 | >>> d.rotate(-1)                     # left rotation | 
|  | 449 | >>> d | 
|  | 450 | deque(['g', 'h', 'i', 'j', 'k', 'l']) | 
|  | 451 |  | 
|  | 452 | >>> deque(reversed(d))               # make a new deque in reverse order | 
|  | 453 | deque(['l', 'k', 'j', 'i', 'h', 'g']) | 
|  | 454 | >>> d.clear()                        # empty the deque | 
|  | 455 | >>> d.pop()                          # cannot pop from an empty deque | 
|  | 456 | Traceback (most recent call last): | 
|  | 457 | File "<pyshell#6>", line 1, in -toplevel- | 
|  | 458 | d.pop() | 
|  | 459 | IndexError: pop from an empty deque | 
|  | 460 |  | 
|  | 461 | >>> d.extendleft('abc')              # extendleft() reverses the input order | 
|  | 462 | >>> d | 
|  | 463 | deque(['c', 'b', 'a']) | 
|  | 464 |  | 
|  | 465 |  | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 466 | :class:`deque` Recipes | 
|  | 467 | ^^^^^^^^^^^^^^^^^^^^^^ | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 468 |  | 
|  | 469 | This section shows various approaches to working with deques. | 
|  | 470 |  | 
| Raymond Hettinger | d2ee64d | 2009-03-31 22:52:48 +0000 | [diff] [blame] | 471 | Bounded length deques provide functionality similar to the ``tail`` filter | 
|  | 472 | in Unix:: | 
|  | 473 |  | 
|  | 474 | def tail(filename, n=10): | 
|  | 475 | 'Return the last n lines of a file' | 
|  | 476 | return deque(open(filename), n) | 
|  | 477 |  | 
|  | 478 | Another approach to using deques is to maintain a sequence of recently | 
|  | 479 | added elements by appending to the right and popping to the left:: | 
|  | 480 |  | 
|  | 481 | def moving_average(iterable, n=3): | 
|  | 482 | # moving_average([40, 30, 50, 46, 39, 44]) --> 40.0 42.0 45.0 43.0 | 
|  | 483 | # http://en.wikipedia.org/wiki/Moving_average | 
|  | 484 | it = iter(iterable) | 
| Raymond Hettinger | d40285a | 2009-05-22 01:11:26 +0000 | [diff] [blame] | 485 | d = deque(itertools.islice(it, n-1)) | 
|  | 486 | d.appendleft(0) | 
| Raymond Hettinger | d2ee64d | 2009-03-31 22:52:48 +0000 | [diff] [blame] | 487 | s = sum(d) | 
| Raymond Hettinger | d2ee64d | 2009-03-31 22:52:48 +0000 | [diff] [blame] | 488 | for elem in it: | 
|  | 489 | s += elem - d.popleft() | 
|  | 490 | d.append(elem) | 
|  | 491 | yield s / n | 
|  | 492 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 493 | The :meth:`rotate` method provides a way to implement :class:`deque` slicing and | 
| Ezio Melotti | 890c193 | 2009-12-19 23:33:46 +0000 | [diff] [blame] | 494 | deletion.  For example, a pure Python implementation of ``del d[n]`` relies on | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 495 | the :meth:`rotate` method to position elements to be popped:: | 
|  | 496 |  | 
|  | 497 | def delete_nth(d, n): | 
|  | 498 | d.rotate(-n) | 
|  | 499 | d.popleft() | 
|  | 500 | d.rotate(n) | 
|  | 501 |  | 
|  | 502 | To implement :class:`deque` slicing, use a similar approach applying | 
|  | 503 | :meth:`rotate` to bring a target element to the left side of the deque. Remove | 
|  | 504 | old entries with :meth:`popleft`, add new entries with :meth:`extend`, and then | 
|  | 505 | reverse the rotation. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 506 | With minor variations on that approach, it is easy to implement Forth style | 
|  | 507 | stack manipulations such as ``dup``, ``drop``, ``swap``, ``over``, ``pick``, | 
|  | 508 | ``rot``, and ``roll``. | 
|  | 509 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 510 |  | 
|  | 511 | :class:`defaultdict` objects | 
|  | 512 | ---------------------------- | 
|  | 513 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 514 | .. class:: defaultdict([default_factory[, ...]]) | 
|  | 515 |  | 
|  | 516 | Returns a new dictionary-like object.  :class:`defaultdict` is a subclass of the | 
| Georg Brandl | c5605df | 2009-08-13 08:26:44 +0000 | [diff] [blame] | 517 | built-in :class:`dict` class.  It overrides one method and adds one writable | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 518 | instance variable.  The remaining functionality is the same as for the | 
|  | 519 | :class:`dict` class and is not documented here. | 
|  | 520 |  | 
|  | 521 | The first argument provides the initial value for the :attr:`default_factory` | 
|  | 522 | attribute; it defaults to ``None``. All remaining arguments are treated the same | 
|  | 523 | as if they were passed to the :class:`dict` constructor, including keyword | 
|  | 524 | arguments. | 
|  | 525 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 526 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 527 | :class:`defaultdict` objects support the following method in addition to the | 
|  | 528 | standard :class:`dict` operations: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 529 |  | 
| Benjamin Peterson | 7a502de | 2010-07-18 14:28:26 +0000 | [diff] [blame^] | 530 | .. method:: __missing__(key) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 531 |  | 
| Benjamin Peterson | 5478b47 | 2008-09-17 22:25:09 +0000 | [diff] [blame] | 532 | If the :attr:`default_factory` attribute is ``None``, this raises a | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 533 | :exc:`KeyError` exception with the *key* as argument. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 534 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 535 | If :attr:`default_factory` is not ``None``, it is called without arguments | 
|  | 536 | to provide a default value for the given *key*, this value is inserted in | 
|  | 537 | the dictionary for the *key*, and returned. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 538 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 539 | If calling :attr:`default_factory` raises an exception this exception is | 
|  | 540 | propagated unchanged. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 541 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 542 | This method is called by the :meth:`__getitem__` method of the | 
|  | 543 | :class:`dict` class when the requested key is not found; whatever it | 
|  | 544 | returns or raises is then returned or raised by :meth:`__getitem__`. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 545 |  | 
|  | 546 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 547 | :class:`defaultdict` objects support the following instance variable: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 548 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 549 |  | 
| Benjamin Peterson | 7a502de | 2010-07-18 14:28:26 +0000 | [diff] [blame^] | 550 | .. attribute:: default_factory | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 551 |  | 
|  | 552 | This attribute is used by the :meth:`__missing__` method; it is | 
|  | 553 | initialized from the first argument to the constructor, if present, or to | 
|  | 554 | ``None``, if absent. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 555 |  | 
|  | 556 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 557 | :class:`defaultdict` Examples | 
|  | 558 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | 
|  | 559 |  | 
|  | 560 | Using :class:`list` as the :attr:`default_factory`, it is easy to group a | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 561 | sequence of key-value pairs into a dictionary of lists: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 562 |  | 
|  | 563 | >>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)] | 
|  | 564 | >>> d = defaultdict(list) | 
|  | 565 | >>> for k, v in s: | 
|  | 566 | ...     d[k].append(v) | 
|  | 567 | ... | 
| Ezio Melotti | 306afd3 | 2009-09-12 19:50:05 +0000 | [diff] [blame] | 568 | >>> list(d.items()) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 569 | [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])] | 
|  | 570 |  | 
|  | 571 | When each key is encountered for the first time, it is not already in the | 
|  | 572 | mapping; so an entry is automatically created using the :attr:`default_factory` | 
|  | 573 | function which returns an empty :class:`list`.  The :meth:`list.append` | 
|  | 574 | operation then attaches the value to the new list.  When keys are encountered | 
|  | 575 | again, the look-up proceeds normally (returning the list for that key) and the | 
|  | 576 | :meth:`list.append` operation adds another value to the list. This technique is | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 577 | simpler and faster than an equivalent technique using :meth:`dict.setdefault`: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 578 |  | 
|  | 579 | >>> d = {} | 
|  | 580 | >>> for k, v in s: | 
|  | 581 | ...     d.setdefault(k, []).append(v) | 
|  | 582 | ... | 
| Ezio Melotti | 306afd3 | 2009-09-12 19:50:05 +0000 | [diff] [blame] | 583 | >>> list(d.items()) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 584 | [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])] | 
|  | 585 |  | 
|  | 586 | Setting the :attr:`default_factory` to :class:`int` makes the | 
|  | 587 | :class:`defaultdict` useful for counting (like a bag or multiset in other | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 588 | languages): | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 589 |  | 
|  | 590 | >>> s = 'mississippi' | 
|  | 591 | >>> d = defaultdict(int) | 
|  | 592 | >>> for k in s: | 
|  | 593 | ...     d[k] += 1 | 
|  | 594 | ... | 
| Ezio Melotti | 306afd3 | 2009-09-12 19:50:05 +0000 | [diff] [blame] | 595 | >>> list(d.items()) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 596 | [('i', 4), ('p', 2), ('s', 4), ('m', 1)] | 
|  | 597 |  | 
|  | 598 | When a letter is first encountered, it is missing from the mapping, so the | 
|  | 599 | :attr:`default_factory` function calls :func:`int` to supply a default count of | 
|  | 600 | zero.  The increment operation then builds up the count for each letter. | 
|  | 601 |  | 
|  | 602 | The function :func:`int` which always returns zero is just a special case of | 
|  | 603 | constant functions.  A faster and more flexible way to create constant functions | 
|  | 604 | is to use a lambda function which can supply any constant value (not just | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 605 | zero): | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 606 |  | 
|  | 607 | >>> def constant_factory(value): | 
|  | 608 | ...     return lambda: value | 
|  | 609 | >>> d = defaultdict(constant_factory('<missing>')) | 
|  | 610 | >>> d.update(name='John', action='ran') | 
|  | 611 | >>> '%(name)s %(action)s to %(object)s' % d | 
|  | 612 | 'John ran to <missing>' | 
|  | 613 |  | 
|  | 614 | Setting the :attr:`default_factory` to :class:`set` makes the | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 615 | :class:`defaultdict` useful for building a dictionary of sets: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 616 |  | 
|  | 617 | >>> s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)] | 
|  | 618 | >>> d = defaultdict(set) | 
|  | 619 | >>> for k, v in s: | 
|  | 620 | ...     d[k].add(v) | 
|  | 621 | ... | 
| Ezio Melotti | 306afd3 | 2009-09-12 19:50:05 +0000 | [diff] [blame] | 622 | >>> list(d.items()) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 623 | [('blue', set([2, 4])), ('red', set([1, 3]))] | 
|  | 624 |  | 
|  | 625 |  | 
| Guido van Rossum | 3d392eb | 2007-11-16 00:35:22 +0000 | [diff] [blame] | 626 | :func:`namedtuple` Factory Function for Tuples with Named Fields | 
| Christian Heimes | 790c823 | 2008-01-07 21:14:23 +0000 | [diff] [blame] | 627 | ---------------------------------------------------------------- | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 628 |  | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 629 | Named tuples assign meaning to each position in a tuple and allow for more readable, | 
|  | 630 | self-documenting code.  They can be used wherever regular tuples are used, and | 
|  | 631 | they add the ability to access fields by name instead of position index. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 632 |  | 
| Georg Brandl | c2a4f4f | 2009-04-10 09:03:43 +0000 | [diff] [blame] | 633 | .. function:: namedtuple(typename, field_names, verbose=False, rename=False) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 634 |  | 
|  | 635 | Returns a new tuple subclass named *typename*.  The new subclass is used to | 
| Christian Heimes | c3f30c4 | 2008-02-22 16:37:40 +0000 | [diff] [blame] | 636 | create tuple-like objects that have fields accessible by attribute lookup as | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 637 | well as being indexable and iterable.  Instances of the subclass also have a | 
| Benjamin Peterson | 4469d0c | 2008-11-30 22:46:23 +0000 | [diff] [blame] | 638 | helpful docstring (with typename and field_names) and a helpful :meth:`__repr__` | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 639 | method which lists the tuple contents in a ``name=value`` format. | 
|  | 640 |  | 
| Benjamin Peterson | 4469d0c | 2008-11-30 22:46:23 +0000 | [diff] [blame] | 641 | The *field_names* are a single string with each fieldname separated by whitespace | 
|  | 642 | and/or commas, for example ``'x y'`` or ``'x, y'``.  Alternatively, *field_names* | 
| Christian Heimes | 25bb783 | 2008-01-11 16:17:00 +0000 | [diff] [blame] | 643 | can be a sequence of strings such as ``['x', 'y']``. | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 644 |  | 
|  | 645 | Any valid Python identifier may be used for a fieldname except for names | 
| Christian Heimes | 0449f63 | 2007-12-15 01:27:15 +0000 | [diff] [blame] | 646 | starting with an underscore.  Valid identifiers consist of letters, digits, | 
|  | 647 | and underscores but do not start with a digit or underscore and cannot be | 
| Georg Brandl | f694518 | 2008-02-01 11:56:49 +0000 | [diff] [blame] | 648 | a :mod:`keyword` such as *class*, *for*, *return*, *global*, *pass*, | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 649 | or *raise*. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 650 |  | 
| Benjamin Peterson | a86f2c0 | 2009-02-10 02:41:10 +0000 | [diff] [blame] | 651 | If *rename* is true, invalid fieldnames are automatically replaced | 
|  | 652 | with positional names.  For example, ``['abc', 'def', 'ghi', 'abc']`` is | 
| Raymond Hettinger | 85737b8 | 2009-04-02 22:37:59 +0000 | [diff] [blame] | 653 | converted to ``['abc', '_1', 'ghi', '_3']``, eliminating the keyword | 
| Benjamin Peterson | a86f2c0 | 2009-02-10 02:41:10 +0000 | [diff] [blame] | 654 | ``def`` and the duplicate fieldname ``abc``. | 
|  | 655 |  | 
| Christian Heimes | 25bb783 | 2008-01-11 16:17:00 +0000 | [diff] [blame] | 656 | If *verbose* is true, the class definition is printed just before being built. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 657 |  | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 658 | Named tuple instances do not have per-instance dictionaries, so they are | 
| Thomas Wouters | 8ce81f7 | 2007-09-20 18:22:40 +0000 | [diff] [blame] | 659 | lightweight and require no more memory than regular tuples. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 660 |  | 
| Raymond Hettinger | b62ad24 | 2009-03-02 22:16:43 +0000 | [diff] [blame] | 661 | .. versionchanged:: 3.1 | 
| Benjamin Peterson | a86f2c0 | 2009-02-10 02:41:10 +0000 | [diff] [blame] | 662 | added support for *rename*. | 
|  | 663 |  | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 664 | Example: | 
|  | 665 |  | 
|  | 666 | .. doctest:: | 
|  | 667 | :options: +NORMALIZE_WHITESPACE | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 668 |  | 
| Guido van Rossum | 3d392eb | 2007-11-16 00:35:22 +0000 | [diff] [blame] | 669 | >>> Point = namedtuple('Point', 'x y', verbose=True) | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 670 | class Point(tuple): | 
|  | 671 | 'Point(x, y)' | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 672 | <BLANKLINE> | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 673 | __slots__ = () | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 674 | <BLANKLINE> | 
| Christian Heimes | faf2f63 | 2008-01-06 16:59:19 +0000 | [diff] [blame] | 675 | _fields = ('x', 'y') | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 676 | <BLANKLINE> | 
| Raymond Hettinger | 089ba7f | 2009-05-27 00:38:24 +0000 | [diff] [blame] | 677 | def __new__(_cls, x, y): | 
|  | 678 | return _tuple.__new__(_cls, (x, y)) | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 679 | <BLANKLINE> | 
| Christian Heimes | faf2f63 | 2008-01-06 16:59:19 +0000 | [diff] [blame] | 680 | @classmethod | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 681 | def _make(cls, iterable, new=tuple.__new__, len=len): | 
| Christian Heimes | faf2f63 | 2008-01-06 16:59:19 +0000 | [diff] [blame] | 682 | 'Make a new Point object from a sequence or iterable' | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 683 | result = new(cls, iterable) | 
| Christian Heimes | faf2f63 | 2008-01-06 16:59:19 +0000 | [diff] [blame] | 684 | if len(result) != 2: | 
|  | 685 | raise TypeError('Expected 2 arguments, got %d' % len(result)) | 
|  | 686 | return result | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 687 | <BLANKLINE> | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 688 | def __repr__(self): | 
|  | 689 | return 'Point(x=%r, y=%r)' % self | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 690 | <BLANKLINE> | 
| Raymond Hettinger | a4f52b1 | 2009-03-02 22:28:31 +0000 | [diff] [blame] | 691 | def _asdict(self): | 
|  | 692 | 'Return a new OrderedDict which maps field names to their values' | 
|  | 693 | return OrderedDict(zip(self._fields, self)) | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 694 | <BLANKLINE> | 
| Raymond Hettinger | 089ba7f | 2009-05-27 00:38:24 +0000 | [diff] [blame] | 695 | def _replace(_self, **kwds): | 
| Guido van Rossum | 3d392eb | 2007-11-16 00:35:22 +0000 | [diff] [blame] | 696 | 'Return a new Point object replacing specified fields with new values' | 
| Raymond Hettinger | 089ba7f | 2009-05-27 00:38:24 +0000 | [diff] [blame] | 697 | result = _self._make(map(kwds.pop, ('x', 'y'), _self)) | 
| Christian Heimes | faf2f63 | 2008-01-06 16:59:19 +0000 | [diff] [blame] | 698 | if kwds: | 
| Ezio Melotti | 2befd9a | 2009-09-13 08:08:32 +0000 | [diff] [blame] | 699 | raise ValueError('Got unexpected field names: %r' % list(kwds.keys())) | 
| Christian Heimes | faf2f63 | 2008-01-06 16:59:19 +0000 | [diff] [blame] | 700 | return result | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 701 | <BLANKLINE> | 
|  | 702 | def __getnewargs__(self): | 
| Benjamin Peterson | 4118174 | 2008-07-02 20:22:54 +0000 | [diff] [blame] | 703 | return tuple(self) | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 704 | <BLANKLINE> | 
| Raymond Hettinger | 089ba7f | 2009-05-27 00:38:24 +0000 | [diff] [blame] | 705 | x = _property(_itemgetter(0)) | 
|  | 706 | y = _property(_itemgetter(1)) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 707 |  | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 708 | >>> p = Point(11, y=22)     # instantiate with positional or keyword arguments | 
| Christian Heimes | 99170a5 | 2007-12-19 02:07:34 +0000 | [diff] [blame] | 709 | >>> p[0] + p[1]             # indexable like the plain tuple (11, 22) | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 710 | 33 | 
|  | 711 | >>> x, y = p                # unpack like a regular tuple | 
|  | 712 | >>> x, y | 
|  | 713 | (11, 22) | 
| Christian Heimes | c3f30c4 | 2008-02-22 16:37:40 +0000 | [diff] [blame] | 714 | >>> p.x + p.y               # fields also accessible by name | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 715 | 33 | 
|  | 716 | >>> p                       # readable __repr__ with a name=value style | 
|  | 717 | Point(x=11, y=22) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 718 |  | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 719 | Named tuples are especially useful for assigning field names to result tuples returned | 
|  | 720 | by the :mod:`csv` or :mod:`sqlite3` modules:: | 
|  | 721 |  | 
| Guido van Rossum | 3d392eb | 2007-11-16 00:35:22 +0000 | [diff] [blame] | 722 | EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade') | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 723 |  | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 724 | import csv | 
| Christian Heimes | faf2f63 | 2008-01-06 16:59:19 +0000 | [diff] [blame] | 725 | for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))): | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 726 | print(emp.name, emp.title) | 
|  | 727 |  | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 728 | import sqlite3 | 
|  | 729 | conn = sqlite3.connect('/companydata') | 
|  | 730 | cursor = conn.cursor() | 
|  | 731 | cursor.execute('SELECT name, age, title, department, paygrade FROM employees') | 
| Christian Heimes | faf2f63 | 2008-01-06 16:59:19 +0000 | [diff] [blame] | 732 | for emp in map(EmployeeRecord._make, cursor.fetchall()): | 
| Christian Heimes | 0041223 | 2008-01-10 16:02:19 +0000 | [diff] [blame] | 733 | print(emp.name, emp.title) | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 734 |  | 
| Christian Heimes | 99170a5 | 2007-12-19 02:07:34 +0000 | [diff] [blame] | 735 | In addition to the methods inherited from tuples, named tuples support | 
| Christian Heimes | 2380ac7 | 2008-01-09 00:17:24 +0000 | [diff] [blame] | 736 | three additional methods and one attribute.  To prevent conflicts with | 
|  | 737 | field names, the method and attribute names start with an underscore. | 
| Christian Heimes | 99170a5 | 2007-12-19 02:07:34 +0000 | [diff] [blame] | 738 |  | 
| Benjamin Peterson | 7a502de | 2010-07-18 14:28:26 +0000 | [diff] [blame^] | 739 | .. classmethod:: somenamedtuple._make(iterable) | 
| Christian Heimes | 99170a5 | 2007-12-19 02:07:34 +0000 | [diff] [blame] | 740 |  | 
| Christian Heimes | faf2f63 | 2008-01-06 16:59:19 +0000 | [diff] [blame] | 741 | Class method that makes a new instance from an existing sequence or iterable. | 
| Christian Heimes | 99170a5 | 2007-12-19 02:07:34 +0000 | [diff] [blame] | 742 |  | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 743 | .. doctest:: | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 744 |  | 
| Christian Heimes | faf2f63 | 2008-01-06 16:59:19 +0000 | [diff] [blame] | 745 | >>> t = [11, 22] | 
|  | 746 | >>> Point._make(t) | 
|  | 747 | Point(x=11, y=22) | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 748 |  | 
| Christian Heimes | 790c823 | 2008-01-07 21:14:23 +0000 | [diff] [blame] | 749 | .. method:: somenamedtuple._asdict() | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 750 |  | 
| Raymond Hettinger | a4f52b1 | 2009-03-02 22:28:31 +0000 | [diff] [blame] | 751 | Return a new :class:`OrderedDict` which maps field names to their corresponding | 
|  | 752 | values:: | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 753 |  | 
| Christian Heimes | 0449f63 | 2007-12-15 01:27:15 +0000 | [diff] [blame] | 754 | >>> p._asdict() | 
| Raymond Hettinger | a4f52b1 | 2009-03-02 22:28:31 +0000 | [diff] [blame] | 755 | OrderedDict([('x', 11), ('y', 22)]) | 
|  | 756 |  | 
| Raymond Hettinger | a88e4da | 2009-03-03 05:12:27 +0000 | [diff] [blame] | 757 | .. versionchanged:: 3.1 | 
| Raymond Hettinger | a4f52b1 | 2009-03-02 22:28:31 +0000 | [diff] [blame] | 758 | Returns an :class:`OrderedDict` instead of a regular :class:`dict`. | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 759 |  | 
| Christian Heimes | 790c823 | 2008-01-07 21:14:23 +0000 | [diff] [blame] | 760 | .. method:: somenamedtuple._replace(kwargs) | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 761 |  | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 762 | Return a new instance of the named tuple replacing specified fields with new | 
|  | 763 | values: | 
| Thomas Wouters | 8ce81f7 | 2007-09-20 18:22:40 +0000 | [diff] [blame] | 764 |  | 
|  | 765 | :: | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 766 |  | 
|  | 767 | >>> p = Point(x=11, y=22) | 
| Christian Heimes | 0449f63 | 2007-12-15 01:27:15 +0000 | [diff] [blame] | 768 | >>> p._replace(x=33) | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 769 | Point(x=33, y=22) | 
|  | 770 |  | 
| Guido van Rossum | 3d392eb | 2007-11-16 00:35:22 +0000 | [diff] [blame] | 771 | >>> for partnum, record in inventory.items(): | 
| Christian Heimes | 454f37b | 2008-01-10 00:10:02 +0000 | [diff] [blame] | 772 | ...     inventory[partnum] = record._replace(price=newprices[partnum], timestamp=time.now()) | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 773 |  | 
| Christian Heimes | 790c823 | 2008-01-07 21:14:23 +0000 | [diff] [blame] | 774 | .. attribute:: somenamedtuple._fields | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 775 |  | 
| Christian Heimes | 2380ac7 | 2008-01-09 00:17:24 +0000 | [diff] [blame] | 776 | Tuple of strings listing the field names.  Useful for introspection | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 777 | and for creating new named tuple types from existing named tuples. | 
| Thomas Wouters | 8ce81f7 | 2007-09-20 18:22:40 +0000 | [diff] [blame] | 778 |  | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 779 | .. doctest:: | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 780 |  | 
| Christian Heimes | 0449f63 | 2007-12-15 01:27:15 +0000 | [diff] [blame] | 781 | >>> p._fields            # view the field names | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 782 | ('x', 'y') | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 783 |  | 
| Guido van Rossum | 3d392eb | 2007-11-16 00:35:22 +0000 | [diff] [blame] | 784 | >>> Color = namedtuple('Color', 'red green blue') | 
| Christian Heimes | 0449f63 | 2007-12-15 01:27:15 +0000 | [diff] [blame] | 785 | >>> Pixel = namedtuple('Pixel', Point._fields + Color._fields) | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 786 | >>> Pixel(11, 22, 128, 255, 0) | 
| Christian Heimes | 454f37b | 2008-01-10 00:10:02 +0000 | [diff] [blame] | 787 | Pixel(x=11, y=22, red=128, green=255, blue=0) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 788 |  | 
| Christian Heimes | 0449f63 | 2007-12-15 01:27:15 +0000 | [diff] [blame] | 789 | To retrieve a field whose name is stored in a string, use the :func:`getattr` | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 790 | function: | 
| Christian Heimes | 0449f63 | 2007-12-15 01:27:15 +0000 | [diff] [blame] | 791 |  | 
|  | 792 | >>> getattr(p, 'x') | 
|  | 793 | 11 | 
|  | 794 |  | 
| Raymond Hettinger | 651453a | 2009-02-11 00:20:02 +0000 | [diff] [blame] | 795 | To convert a dictionary to a named tuple, use the double-star-operator | 
|  | 796 | (as described in :ref:`tut-unpacking-arguments`): | 
| Christian Heimes | 99170a5 | 2007-12-19 02:07:34 +0000 | [diff] [blame] | 797 |  | 
|  | 798 | >>> d = {'x': 11, 'y': 22} | 
|  | 799 | >>> Point(**d) | 
|  | 800 | Point(x=11, y=22) | 
|  | 801 |  | 
| Guido van Rossum | 3d392eb | 2007-11-16 00:35:22 +0000 | [diff] [blame] | 802 | Since a named tuple is a regular Python class, it is easy to add or change | 
| Christian Heimes | 043d6f6 | 2008-01-07 17:19:16 +0000 | [diff] [blame] | 803 | functionality with a subclass.  Here is how to add a calculated field and | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 804 | a fixed-width print format: | 
| Guido van Rossum | 3d392eb | 2007-11-16 00:35:22 +0000 | [diff] [blame] | 805 |  | 
| Christian Heimes | 043d6f6 | 2008-01-07 17:19:16 +0000 | [diff] [blame] | 806 | >>> class Point(namedtuple('Point', 'x y')): | 
| Christian Heimes | 25bb783 | 2008-01-11 16:17:00 +0000 | [diff] [blame] | 807 | ...     __slots__ = () | 
| Christian Heimes | 454f37b | 2008-01-10 00:10:02 +0000 | [diff] [blame] | 808 | ...     @property | 
|  | 809 | ...     def hypot(self): | 
|  | 810 | ...         return (self.x ** 2 + self.y ** 2) ** 0.5 | 
|  | 811 | ...     def __str__(self): | 
| Christian Heimes | 25bb783 | 2008-01-11 16:17:00 +0000 | [diff] [blame] | 812 | ...         return 'Point: x=%6.3f  y=%6.3f  hypot=%6.3f' % (self.x, self.y, self.hypot) | 
| Guido van Rossum | 3d392eb | 2007-11-16 00:35:22 +0000 | [diff] [blame] | 813 |  | 
| Georg Brandl | 0df7979 | 2008-10-04 18:33:26 +0000 | [diff] [blame] | 814 | >>> for p in Point(3, 4), Point(14, 5/7): | 
| Christian Heimes | 0041223 | 2008-01-10 16:02:19 +0000 | [diff] [blame] | 815 | ...     print(p) | 
| Christian Heimes | 25bb783 | 2008-01-11 16:17:00 +0000 | [diff] [blame] | 816 | Point: x= 3.000  y= 4.000  hypot= 5.000 | 
|  | 817 | Point: x=14.000  y= 0.714  hypot=14.018 | 
| Christian Heimes | 043d6f6 | 2008-01-07 17:19:16 +0000 | [diff] [blame] | 818 |  | 
| Christian Heimes | af98da1 | 2008-01-27 15:18:18 +0000 | [diff] [blame] | 819 | The subclass shown above sets ``__slots__`` to an empty tuple.  This keeps | 
| Christian Heimes | 679db4a | 2008-01-18 09:56:22 +0000 | [diff] [blame] | 820 | keep memory requirements low by preventing the creation of instance dictionaries. | 
|  | 821 |  | 
| Christian Heimes | 2380ac7 | 2008-01-09 00:17:24 +0000 | [diff] [blame] | 822 |  | 
|  | 823 | Subclassing is not useful for adding new, stored fields.  Instead, simply | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 824 | create a new named tuple type from the :attr:`_fields` attribute: | 
| Christian Heimes | 2380ac7 | 2008-01-09 00:17:24 +0000 | [diff] [blame] | 825 |  | 
| Christian Heimes | 25bb783 | 2008-01-11 16:17:00 +0000 | [diff] [blame] | 826 | >>> Point3D = namedtuple('Point3D', Point._fields + ('z',)) | 
| Christian Heimes | 2380ac7 | 2008-01-09 00:17:24 +0000 | [diff] [blame] | 827 |  | 
|  | 828 | Default values can be implemented by using :meth:`_replace` to | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 829 | customize a prototype instance: | 
| Guido van Rossum | 3d392eb | 2007-11-16 00:35:22 +0000 | [diff] [blame] | 830 |  | 
|  | 831 | >>> Account = namedtuple('Account', 'owner balance transaction_count') | 
| Christian Heimes | 587c2bf | 2008-01-19 16:21:02 +0000 | [diff] [blame] | 832 | >>> default_account = Account('<owner name>', 0.0, 0) | 
|  | 833 | >>> johns_account = default_account._replace(owner='John') | 
| Guido van Rossum | 3d392eb | 2007-11-16 00:35:22 +0000 | [diff] [blame] | 834 |  | 
| Christian Heimes | e4ca815 | 2008-05-08 17:18:53 +0000 | [diff] [blame] | 835 | Enumerated constants can be implemented with named tuples, but it is simpler | 
|  | 836 | and more efficient to use a simple class declaration: | 
|  | 837 |  | 
|  | 838 | >>> Status = namedtuple('Status', 'open pending closed')._make(range(3)) | 
|  | 839 | >>> Status.open, Status.pending, Status.closed | 
|  | 840 | (0, 1, 2) | 
|  | 841 | >>> class Status: | 
|  | 842 | ...     open, pending, closed = range(3) | 
|  | 843 |  | 
| Raymond Hettinger | 651453a | 2009-02-11 00:20:02 +0000 | [diff] [blame] | 844 | .. seealso:: | 
| Thomas Wouters | 47b49bf | 2007-08-30 22:15:33 +0000 | [diff] [blame] | 845 |  | 
| Raymond Hettinger | 651453a | 2009-02-11 00:20:02 +0000 | [diff] [blame] | 846 | `Named tuple recipe <http://code.activestate.com/recipes/500261/>`_ | 
|  | 847 | adapted for Python 2.4. | 
| Raymond Hettinger | e4c96ad | 2008-02-06 01:23:58 +0000 | [diff] [blame] | 848 |  | 
|  | 849 |  | 
| Raymond Hettinger | 2d32f63 | 2009-03-02 21:24:57 +0000 | [diff] [blame] | 850 | :class:`OrderedDict` objects | 
|  | 851 | ---------------------------- | 
|  | 852 |  | 
|  | 853 | Ordered dictionaries are just like regular dictionaries but they remember the | 
|  | 854 | order that items were inserted.  When iterating over an ordered dictionary, | 
|  | 855 | the items are returned in the order their keys were first added. | 
|  | 856 |  | 
|  | 857 | .. class:: OrderedDict([items]) | 
|  | 858 |  | 
|  | 859 | Return an instance of a dict subclass, supporting the usual :class:`dict` | 
|  | 860 | methods.  An *OrderedDict* is a dict that remembers the order that keys | 
|  | 861 | were first inserted. If a new entry overwrites an existing entry, the | 
|  | 862 | original insertion position is left unchanged.  Deleting an entry and | 
|  | 863 | reinserting it will move it to the end. | 
|  | 864 |  | 
| Benjamin Peterson | d45bf58 | 2009-03-02 21:44:54 +0000 | [diff] [blame] | 865 | .. versionadded:: 3.1 | 
| Raymond Hettinger | 2d32f63 | 2009-03-02 21:24:57 +0000 | [diff] [blame] | 866 |  | 
| Benjamin Peterson | 7a502de | 2010-07-18 14:28:26 +0000 | [diff] [blame^] | 867 | .. method:: popitem(last=True) | 
| Raymond Hettinger | dc879f0 | 2009-03-19 20:30:56 +0000 | [diff] [blame] | 868 |  | 
| Benjamin Peterson | 7a502de | 2010-07-18 14:28:26 +0000 | [diff] [blame^] | 869 | The :meth:`popitem` method for ordered dictionaries returns and removes a | 
|  | 870 | (key, value) pair.  The pairs are returned in LIFO order if *last* is true | 
|  | 871 | or FIFO order if false. | 
| Raymond Hettinger | 2d32f63 | 2009-03-02 21:24:57 +0000 | [diff] [blame] | 872 |  | 
| Raymond Hettinger | e909150 | 2009-05-19 17:40:07 +0000 | [diff] [blame] | 873 | In addition to the usual mapping methods, ordered dictionaries also support | 
|  | 874 | reverse iteration using :func:`reversed`. | 
|  | 875 |  | 
| Raymond Hettinger | 2d32f63 | 2009-03-02 21:24:57 +0000 | [diff] [blame] | 876 | Equality tests between :class:`OrderedDict` objects are order-sensitive | 
|  | 877 | and are implemented as ``list(od1.items())==list(od2.items())``. | 
|  | 878 | Equality tests between :class:`OrderedDict` objects and other | 
|  | 879 | :class:`Mapping` objects are order-insensitive like regular dictionaries. | 
|  | 880 | This allows :class:`OrderedDict` objects to be substituted anywhere a | 
|  | 881 | regular dictionary is used. | 
|  | 882 |  | 
| Raymond Hettinger | 3618078 | 2009-04-09 22:34:23 +0000 | [diff] [blame] | 883 | The :class:`OrderedDict` constructor and :meth:`update` method both accept | 
|  | 884 | keyword arguments, but their order is lost because Python's function call | 
|  | 885 | semantics pass-in keyword arguments using a regular unordered dictionary. | 
|  | 886 |  | 
| Raymond Hettinger | dc879f0 | 2009-03-19 20:30:56 +0000 | [diff] [blame] | 887 | .. seealso:: | 
|  | 888 |  | 
|  | 889 | `Equivalent OrderedDict recipe <http://code.activestate.com/recipes/576693/>`_ | 
|  | 890 | that runs on Python 2.4 or later. | 
|  | 891 |  | 
| Raymond Hettinger | c529c2f | 2009-11-10 18:21:06 +0000 | [diff] [blame] | 892 | Since an ordered dictionary remembers its insertion order, it can be used | 
|  | 893 | in conjuction with sorting to make a sorted dictionary:: | 
|  | 894 |  | 
|  | 895 | >>> # regular unsorted dictionary | 
|  | 896 | >>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2} | 
|  | 897 |  | 
|  | 898 | >>> # dictionary sorted by key | 
|  | 899 | >>> OrderedDict(sorted(d.items(), key=lambda t: t[0])) | 
|  | 900 | OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]) | 
|  | 901 |  | 
|  | 902 | >>> # dictionary sorted by value | 
|  | 903 | >>> OrderedDict(sorted(d.items(), key=lambda t: t[1])) | 
|  | 904 | OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)]) | 
|  | 905 |  | 
|  | 906 | >>> # dictionary sorted by length of the key string | 
|  | 907 | >>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0]))) | 
|  | 908 | OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)]) | 
|  | 909 |  | 
|  | 910 | The new sorted dictionaries maintain their sort order when entries | 
|  | 911 | are deleted.  But when new keys are added, the keys are appended | 
|  | 912 | to the end and the sort is not maintained. | 
|  | 913 |  | 
| Raymond Hettinger | e4c96ad | 2008-02-06 01:23:58 +0000 | [diff] [blame] | 914 |  | 
|  | 915 | :class:`UserDict` objects | 
| Mark Summerfield | 8f2d006 | 2008-02-06 13:30:44 +0000 | [diff] [blame] | 916 | ------------------------- | 
| Raymond Hettinger | e4c96ad | 2008-02-06 01:23:58 +0000 | [diff] [blame] | 917 |  | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 918 | The class, :class:`UserDict` acts as a wrapper around dictionary objects. | 
|  | 919 | The need for this class has been partially supplanted by the ability to | 
| Raymond Hettinger | e4c96ad | 2008-02-06 01:23:58 +0000 | [diff] [blame] | 920 | subclass directly from :class:`dict`; however, this class can be easier | 
|  | 921 | to work with because the underlying dictionary is accessible as an | 
|  | 922 | attribute. | 
|  | 923 |  | 
|  | 924 | .. class:: UserDict([initialdata]) | 
|  | 925 |  | 
|  | 926 | Class that simulates a dictionary.  The instance's contents are kept in a | 
|  | 927 | regular dictionary, which is accessible via the :attr:`data` attribute of | 
|  | 928 | :class:`UserDict` instances.  If *initialdata* is provided, :attr:`data` is | 
|  | 929 | initialized with its contents; note that a reference to *initialdata* will not | 
|  | 930 | be kept, allowing it be used for other purposes. | 
|  | 931 |  | 
| Benjamin Peterson | 7a502de | 2010-07-18 14:28:26 +0000 | [diff] [blame^] | 932 | In addition to supporting the methods and operations of mappings, | 
|  | 933 | :class:`UserDict` instances provide the following attribute: | 
| Raymond Hettinger | e4c96ad | 2008-02-06 01:23:58 +0000 | [diff] [blame] | 934 |  | 
| Benjamin Peterson | 7a502de | 2010-07-18 14:28:26 +0000 | [diff] [blame^] | 935 | .. attribute:: data | 
| Raymond Hettinger | e4c96ad | 2008-02-06 01:23:58 +0000 | [diff] [blame] | 936 |  | 
| Benjamin Peterson | 7a502de | 2010-07-18 14:28:26 +0000 | [diff] [blame^] | 937 | A real dictionary used to store the contents of the :class:`UserDict` | 
|  | 938 | class. | 
| Raymond Hettinger | 53dbe39 | 2008-02-12 20:03:09 +0000 | [diff] [blame] | 939 |  | 
|  | 940 |  | 
|  | 941 |  | 
|  | 942 | :class:`UserList` objects | 
|  | 943 | ------------------------- | 
|  | 944 |  | 
|  | 945 | This class acts as a wrapper around list objects.  It is a useful base class | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 946 | for your own list-like classes which can inherit from them and override | 
| Raymond Hettinger | 53dbe39 | 2008-02-12 20:03:09 +0000 | [diff] [blame] | 947 | existing methods or add new ones.  In this way, one can add new behaviors to | 
|  | 948 | lists. | 
|  | 949 |  | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 950 | The need for this class has been partially supplanted by the ability to | 
| Raymond Hettinger | 53dbe39 | 2008-02-12 20:03:09 +0000 | [diff] [blame] | 951 | subclass directly from :class:`list`; however, this class can be easier | 
|  | 952 | to work with because the underlying list is accessible as an attribute. | 
|  | 953 |  | 
|  | 954 | .. class:: UserList([list]) | 
|  | 955 |  | 
|  | 956 | Class that simulates a list.  The instance's contents are kept in a regular | 
|  | 957 | list, which is accessible via the :attr:`data` attribute of :class:`UserList` | 
|  | 958 | instances.  The instance's contents are initially set to a copy of *list*, | 
|  | 959 | defaulting to the empty list ``[]``.  *list* can be any iterable, for | 
|  | 960 | example a real Python list or a :class:`UserList` object. | 
|  | 961 |  | 
| Benjamin Peterson | 7a502de | 2010-07-18 14:28:26 +0000 | [diff] [blame^] | 962 | In addition to supporting the methods and operations of mutable sequences, | 
|  | 963 | :class:`UserList` instances provide the following attribute: | 
| Raymond Hettinger | 53dbe39 | 2008-02-12 20:03:09 +0000 | [diff] [blame] | 964 |  | 
| Benjamin Peterson | 7a502de | 2010-07-18 14:28:26 +0000 | [diff] [blame^] | 965 | .. attribute:: data | 
| Raymond Hettinger | 53dbe39 | 2008-02-12 20:03:09 +0000 | [diff] [blame] | 966 |  | 
| Benjamin Peterson | 7a502de | 2010-07-18 14:28:26 +0000 | [diff] [blame^] | 967 | A real :class:`list` object used to store the contents of the | 
|  | 968 | :class:`UserList` class. | 
| Raymond Hettinger | 53dbe39 | 2008-02-12 20:03:09 +0000 | [diff] [blame] | 969 |  | 
|  | 970 | **Subclassing requirements:** Subclasses of :class:`UserList` are expect to | 
|  | 971 | offer a constructor which can be called with either no arguments or one | 
|  | 972 | argument.  List operations which return a new sequence attempt to create an | 
|  | 973 | instance of the actual implementation class.  To do so, it assumes that the | 
|  | 974 | constructor can be called with a single parameter, which is a sequence object | 
|  | 975 | used as a data source. | 
|  | 976 |  | 
|  | 977 | If a derived class does not wish to comply with this requirement, all of the | 
|  | 978 | special methods supported by this class will need to be overridden; please | 
|  | 979 | consult the sources for information about the methods which need to be provided | 
|  | 980 | in that case. | 
| Raymond Hettinger | b3a65f8 | 2008-02-21 22:11:37 +0000 | [diff] [blame] | 981 |  | 
|  | 982 | :class:`UserString` objects | 
| Christian Heimes | c3f30c4 | 2008-02-22 16:37:40 +0000 | [diff] [blame] | 983 | --------------------------- | 
| Raymond Hettinger | b3a65f8 | 2008-02-21 22:11:37 +0000 | [diff] [blame] | 984 |  | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 985 | The class, :class:`UserString` acts as a wrapper around string objects. | 
|  | 986 | The need for this class has been partially supplanted by the ability to | 
| Raymond Hettinger | b3a65f8 | 2008-02-21 22:11:37 +0000 | [diff] [blame] | 987 | subclass directly from :class:`str`; however, this class can be easier | 
|  | 988 | to work with because the underlying string is accessible as an | 
|  | 989 | attribute. | 
|  | 990 |  | 
|  | 991 | .. class:: UserString([sequence]) | 
|  | 992 |  | 
|  | 993 | Class that simulates a string or a Unicode string object.  The instance's | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 994 | content is kept in a regular string object, which is accessible via the | 
|  | 995 | :attr:`data` attribute of :class:`UserString` instances.  The instance's | 
| Raymond Hettinger | b3a65f8 | 2008-02-21 22:11:37 +0000 | [diff] [blame] | 996 | contents are initially set to a copy of *sequence*.  The *sequence* can | 
|  | 997 | be an instance of :class:`bytes`, :class:`str`, :class:`UserString` (or a | 
|  | 998 | subclass) or an arbitrary sequence which can be converted into a string using | 
|  | 999 | the built-in :func:`str` function. |