| 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 | 7929cfb | 2012-06-09 19:15:26 -0700 | [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 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 11 |     from collections import * | 
 | 12 |     import itertools | 
 | 13 |     __name__ = '<doctest>' | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 14 |  | 
| Raymond Hettinger | 158c9c2 | 2011-02-22 00:41:50 +0000 | [diff] [blame] | 15 | **Source code:** :source:`Lib/collections/__init__.py` | 
| Raymond Hettinger | 1048094 | 2011-01-10 03:26:08 +0000 | [diff] [blame] | 16 |  | 
| Raymond Hettinger | 4f707fd | 2011-01-10 19:54:11 +0000 | [diff] [blame] | 17 | -------------- | 
 | 18 |  | 
| Raymond Hettinger | a6b76ba | 2010-08-08 00:29:08 +0000 | [diff] [blame] | 19 | This module implements specialized container datatypes providing alternatives to | 
 | 20 | Python's general purpose built-in containers, :class:`dict`, :class:`list`, | 
 | 21 | :class:`set`, and :class:`tuple`. | 
| Christian Heimes | 0bd4e11 | 2008-02-12 22:59:25 +0000 | [diff] [blame] | 22 |  | 
| Raymond Hettinger | a6b76ba | 2010-08-08 00:29:08 +0000 | [diff] [blame] | 23 | =====================   ==================================================================== | 
 | 24 | :func:`namedtuple`      factory function for creating tuple subclasses with named fields | 
 | 25 | :class:`deque`          list-like container with fast appends and pops on either end | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 26 | :class:`ChainMap`       dict-like class for creating a single view of multiple mappings | 
| Raymond Hettinger | a6b76ba | 2010-08-08 00:29:08 +0000 | [diff] [blame] | 27 | :class:`Counter`        dict subclass for counting hashable objects | 
 | 28 | :class:`OrderedDict`    dict subclass that remembers the order entries were added | 
 | 29 | :class:`defaultdict`    dict subclass that calls a factory function to supply missing values | 
 | 30 | :class:`UserDict`       wrapper around dictionary objects for easier dict subclassing | 
 | 31 | :class:`UserList`       wrapper around list objects for easier list subclassing | 
 | 32 | :class:`UserString`     wrapper around string objects for easier string subclassing | 
 | 33 | =====================   ==================================================================== | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 34 |  | 
| Raymond Hettinger | 158c9c2 | 2011-02-22 00:41:50 +0000 | [diff] [blame] | 35 | .. versionchanged:: 3.3 | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 36 |     Moved :ref:`collections-abstract-base-classes` to the :mod:`collections.abc` module. | 
 | 37 |     For backwards compatibility, they continue to be visible in this module | 
 | 38 |     as well. | 
| Mark Summerfield | 08898b4 | 2007-09-05 08:43:04 +0000 | [diff] [blame] | 39 |  | 
 | 40 |  | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 41 | :class:`ChainMap` objects | 
 | 42 | ------------------------- | 
 | 43 |  | 
| Georg Brandl | 283b96b | 2012-04-03 09:16:46 +0200 | [diff] [blame] | 44 | .. versionadded:: 3.3 | 
 | 45 |  | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 46 | A :class:`ChainMap` class is provided for quickly linking a number of mappings | 
 | 47 | so they can be treated as a single unit.  It is often much faster than creating | 
 | 48 | a new dictionary and running multiple :meth:`~dict.update` calls. | 
 | 49 |  | 
 | 50 | The class can be used to simulate nested scopes and is useful in templating. | 
 | 51 |  | 
 | 52 | .. class:: ChainMap(*maps) | 
 | 53 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 54 |     A :class:`ChainMap` groups multiple dicts or other mappings together to | 
 | 55 |     create a single, updateable view.  If no *maps* are specified, a single empty | 
 | 56 |     dictionary is provided so that a new chain always has at least one mapping. | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 57 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 58 |     The underlying mappings are stored in a list.  That list is public and can | 
 | 59 |     accessed or updated using the *maps* attribute.  There is no other state. | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 60 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 61 |     Lookups search the underlying mappings successively until a key is found.  In | 
 | 62 |     contrast, writes, updates, and deletions only operate on the first mapping. | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 63 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 64 |     A :class:`ChainMap` incorporates the underlying mappings by reference.  So, if | 
 | 65 |     one of the underlying mappings gets updated, those changes will be reflected | 
 | 66 |     in :class:`ChainMap`. | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 67 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 68 |     All of the usual dictionary methods are supported.  In addition, there is a | 
 | 69 |     *maps* attribute, a method for creating new subcontexts, and a property for | 
 | 70 |     accessing all but the first mapping: | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 71 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 72 |     .. attribute:: maps | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 73 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 74 |         A user updateable list of mappings.  The list is ordered from | 
 | 75 |         first-searched to last-searched.  It is the only stored state and can | 
 | 76 |         be modified to change which mappings are searched.  The list should | 
 | 77 |         always contain at least one mapping. | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 78 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 79 |     .. method:: new_child() | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 80 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 81 |         Returns a new :class:`ChainMap` containing a new :class:`dict` followed by | 
 | 82 |         all of the maps in the current instance.  A call to ``d.new_child()`` is | 
 | 83 |         equivalent to: ``ChainMap({}, *d.maps)``.  This method is used for | 
 | 84 |         creating subcontexts that can be updated without altering values in any | 
 | 85 |         of the parent mappings. | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 86 |  | 
| Raymond Hettinger | 2a61c45 | 2012-07-15 22:37:20 -0700 | [diff] [blame] | 87 |     .. attribute:: parents | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 88 |  | 
| Raymond Hettinger | 2a61c45 | 2012-07-15 22:37:20 -0700 | [diff] [blame] | 89 |         Proerty returning a new :class:`ChainMap` containing all of the maps in | 
 | 90 |         the current instance except the first one.  This is useful for skipping | 
 | 91 |         the first map in the search.  Use cases are similar to those for the | 
 | 92 |         :keyword:`nonlocal` keyword used in :term:`nested scopes <nested | 
 | 93 |         scope>`.  The use cases also parallel those for the built-in | 
 | 94 |         :func:`super` function.  A reference to ``d.parents`` is equivalent to: | 
 | 95 |         ``ChainMap(*d.maps[1:])``. | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 96 |  | 
| Raymond Hettinger | bfcb429 | 2012-06-10 11:39:44 -0700 | [diff] [blame] | 97 |  | 
 | 98 | .. seealso:: | 
 | 99 |  | 
 | 100 |     * The `MultiContext class | 
 | 101 |       <http://svn.enthought.com/svn/enthought/CodeTools/trunk/enthought/contexts/multi_context.py>`_ | 
 | 102 |       in the Enthought `CodeTools package | 
 | 103 |       <https://github.com/enthought/codetools>`_ has options to support | 
 | 104 |       writing to any mapping in the chain. | 
 | 105 |  | 
 | 106 |     * Django's `Context class | 
 | 107 |       <http://code.djangoproject.com/browser/django/trunk/django/template/context.py>`_ | 
 | 108 |       for templating is a read-only chain of mappings.  It also features | 
 | 109 |       pushing and popping of contexts similar to the | 
 | 110 |       :meth:`~collections.ChainMap.new_child` method and the | 
 | 111 |       :meth:`~collections.ChainMap.parents` property. | 
 | 112 |  | 
 | 113 |     * The `Nested Contexts recipe | 
 | 114 |       <http://code.activestate.com/recipes/577434/>`_ has options to control | 
 | 115 |       whether writes and other mutations apply only to the first mapping or to | 
 | 116 |       any mapping in the chain. | 
 | 117 |  | 
 | 118 |     * A `greatly simplified read-only version of Chainmap | 
 | 119 |       <http://code.activestate.com/recipes/305268/>`_. | 
 | 120 |  | 
 | 121 |  | 
 | 122 | :class:`ChainMap` Examples and Recipes | 
 | 123 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | 
 | 124 |  | 
 | 125 | This section shows various approaches to working with chained maps. | 
 | 126 |  | 
 | 127 |  | 
 | 128 | Example of simulating Python's internal lookup chain:: | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 129 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 130 |         import builtins | 
 | 131 |         pylookup = ChainMap(locals(), globals(), vars(builtins)) | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 132 |  | 
| Raymond Hettinger | bfcb429 | 2012-06-10 11:39:44 -0700 | [diff] [blame] | 133 | Example of letting user specified values take precedence over environment | 
 | 134 | variables which in turn take precedence over default values:: | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 135 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 136 |         import os, argparse | 
 | 137 |         defaults = {'color': 'red', 'user': guest} | 
 | 138 |         parser = argparse.ArgumentParser() | 
 | 139 |         parser.add_argument('-u', '--user') | 
 | 140 |         parser.add_argument('-c', '--color') | 
 | 141 |         user_specified = vars(parser.parse_args()) | 
 | 142 |         combined = ChainMap(user_specified, os.environ, defaults) | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 143 |  | 
| Raymond Hettinger | bfcb429 | 2012-06-10 11:39:44 -0700 | [diff] [blame] | 144 | Example patterns for using the :class:`ChainMap` class to simulate nested | 
 | 145 | contexts:: | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 146 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 147 |         c = ChainMap()        # Create root context | 
 | 148 |         d = c.new_child()     # Create nested child context | 
 | 149 |         e = c.new_child()     # Child of c, independent from d | 
 | 150 |         e.maps[0]             # Current context dictionary -- like Python's locals() | 
 | 151 |         e.maps[-1]            # Root context -- like Python's globals() | 
 | 152 |         e.parents             # Enclosing context chain -- like Python's nonlocals | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 153 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 154 |         d['x']                # Get first key in the chain of contexts | 
 | 155 |         d['x'] = 1            # Set value in current context | 
 | 156 |         del['x']              # Delete from current context | 
 | 157 |         list(d)               # All nested values | 
 | 158 |         k in d                # Check all nested values | 
 | 159 |         len(d)                # Number of nested values | 
 | 160 |         d.items()             # All nested items | 
 | 161 |         dict(d)               # Flatten into a regular dictionary | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 162 |  | 
| Raymond Hettinger | bfcb429 | 2012-06-10 11:39:44 -0700 | [diff] [blame] | 163 | The :class:`ChainMap` class only makes updates (writes and deletions) to the | 
 | 164 | first mapping in the chain while lookups will search the full chain.  However, | 
 | 165 | if deep writes and deletions are desired, it is easy to make a subclass that | 
 | 166 | updates keys found deeper in the chain:: | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 167 |  | 
| Raymond Hettinger | bfcb429 | 2012-06-10 11:39:44 -0700 | [diff] [blame] | 168 |     class DeepChainMap(ChainMap): | 
 | 169 |         'Variant of ChainMap that allows direct updates to inner scopes' | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 170 |  | 
| Raymond Hettinger | bfcb429 | 2012-06-10 11:39:44 -0700 | [diff] [blame] | 171 |         def __setitem__(self, key, value): | 
 | 172 |             for mapping in self.maps: | 
 | 173 |                 if key in mapping: | 
 | 174 |                     mapping[key] = value | 
 | 175 |                     return | 
 | 176 |             self.maps[0][key] = value | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 177 |  | 
| Raymond Hettinger | bfcb429 | 2012-06-10 11:39:44 -0700 | [diff] [blame] | 178 |         def __delitem__(self, key): | 
 | 179 |             for mapping in self.maps: | 
 | 180 |                 if key in mapping: | 
 | 181 |                     del mapping[key] | 
 | 182 |                     return | 
 | 183 |             raise KeyError(key) | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 184 |  | 
| Raymond Hettinger | bfcb429 | 2012-06-10 11:39:44 -0700 | [diff] [blame] | 185 |     >>> d = DeepChainMap({'zebra': 'black'}, {'elephant' : 'blue'}, {'lion' : 'yellow'}) | 
 | 186 |     >>> d['lion'] = 'orange'         # update an existing key two levels down | 
 | 187 |     >>> d['snake'] = 'red'           # new keys get added to the topmost dict | 
 | 188 |     >>> del d['elephant']            # remove an existing key one level down | 
 | 189 |     DeepChainMap({'zebra': 'black', 'snake': 'red'}, {}, {'lion': 'orange'}) | 
| Georg Brandl | 4dcf474 | 2012-03-08 20:35:08 +0100 | [diff] [blame] | 190 |  | 
| Raymond Hettinger | 9fe1ccf | 2011-02-26 01:02:51 +0000 | [diff] [blame] | 191 |  | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 192 | :class:`Counter` objects | 
 | 193 | ------------------------ | 
 | 194 |  | 
 | 195 | A counter tool is provided to support convenient and rapid tallies. | 
 | 196 | For example:: | 
 | 197 |  | 
| Raymond Hettinger | 1c62dc9 | 2009-02-04 11:41:45 +0000 | [diff] [blame] | 198 |     >>> # Tally occurrences of words in a list | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 199 |     >>> cnt = Counter() | 
| Raymond Hettinger | 670eaec | 2009-01-21 23:14:07 +0000 | [diff] [blame] | 200 |     >>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']: | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 201 |     ...     cnt[word] += 1 | 
 | 202 |     >>> cnt | 
 | 203 |     Counter({'blue': 3, 'red': 2, 'green': 1}) | 
 | 204 |  | 
| Raymond Hettinger | 1c62dc9 | 2009-02-04 11:41:45 +0000 | [diff] [blame] | 205 |     >>> # Find the ten most common words in Hamlet | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 206 |     >>> import re | 
 | 207 |     >>> words = re.findall('\w+', open('hamlet.txt').read().lower()) | 
| Raymond Hettinger | 0bae662 | 2009-01-20 13:00:59 +0000 | [diff] [blame] | 208 |     >>> Counter(words).most_common(10) | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 209 |     [('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631), | 
 | 210 |      ('you', 554),  ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)] | 
 | 211 |  | 
 | 212 | .. class:: Counter([iterable-or-mapping]) | 
 | 213 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 214 |     A :class:`Counter` is a :class:`dict` subclass for counting hashable objects. | 
 | 215 |     It is an unordered collection where elements are stored as dictionary keys | 
 | 216 |     and their counts are stored as dictionary values.  Counts are allowed to be | 
 | 217 |     any integer value including zero or negative counts.  The :class:`Counter` | 
 | 218 |     class is similar to bags or multisets in other languages. | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 219 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 220 |     Elements are counted from an *iterable* or initialized from another | 
 | 221 |     *mapping* (or counter): | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 222 |  | 
| Raymond Hettinger | 73662a5 | 2009-01-27 02:38:22 +0000 | [diff] [blame] | 223 |         >>> c = Counter()                           # a new, empty counter | 
 | 224 |         >>> c = Counter('gallahad')                 # a new counter from an iterable | 
 | 225 |         >>> c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping | 
 | 226 |         >>> c = Counter(cats=4, dogs=8)             # a new counter from keyword args | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 227 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 228 |     Counter objects have a dictionary interface except that they return a zero | 
 | 229 |     count for missing items instead of raising a :exc:`KeyError`: | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 230 |  | 
| Raymond Hettinger | 94adc8e | 2009-01-22 05:27:37 +0000 | [diff] [blame] | 231 |         >>> c = Counter(['eggs', 'ham']) | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 232 |         >>> c['bacon']                              # count of a missing element is zero | 
 | 233 |         0 | 
 | 234 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 235 |     Setting a count to zero does not remove an element from a counter. | 
 | 236 |     Use ``del`` to remove it entirely: | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 237 |  | 
| Raymond Hettinger | 94adc8e | 2009-01-22 05:27:37 +0000 | [diff] [blame] | 238 |         >>> c['sausage'] = 0                        # counter entry with a zero count | 
 | 239 |         >>> del c['sausage']                        # del actually removes the entry | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 240 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 241 |     .. versionadded:: 3.1 | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 242 |  | 
 | 243 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 244 |     Counter objects support three methods beyond those available for all | 
 | 245 |     dictionaries: | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 246 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 247 |     .. method:: elements() | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 248 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 249 |         Return an iterator over elements repeating each as many times as its | 
 | 250 |         count.  Elements are returned in arbitrary order.  If an element's count | 
 | 251 |         is less than one, :meth:`elements` will ignore it. | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 252 |  | 
| Raymond Hettinger | 0bae662 | 2009-01-20 13:00:59 +0000 | [diff] [blame] | 253 |             >>> c = Counter(a=4, b=2, c=0, d=-2) | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 254 |             >>> list(c.elements()) | 
 | 255 |             ['a', 'a', 'a', 'a', 'b', 'b'] | 
 | 256 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 257 |     .. method:: most_common([n]) | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 258 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 259 |         Return a list of the *n* most common elements and their counts from the | 
 | 260 |         most common to the least.  If *n* is not specified, :func:`most_common` | 
 | 261 |         returns *all* elements in the counter.  Elements with equal counts are | 
 | 262 |         ordered arbitrarily: | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 263 |  | 
 | 264 |             >>> Counter('abracadabra').most_common(3) | 
 | 265 |             [('a', 5), ('r', 2), ('b', 2)] | 
 | 266 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 267 |     .. method:: subtract([iterable-or-mapping]) | 
| Raymond Hettinger | 9c01e44 | 2010-04-03 10:32:58 +0000 | [diff] [blame] | 268 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 269 |         Elements are subtracted from an *iterable* or from another *mapping* | 
 | 270 |         (or counter).  Like :meth:`dict.update` but subtracts counts instead | 
 | 271 |         of replacing them.  Both inputs and outputs may be zero or negative. | 
| Raymond Hettinger | 9c01e44 | 2010-04-03 10:32:58 +0000 | [diff] [blame] | 272 |  | 
 | 273 |             >>> c = Counter(a=4, b=2, c=0, d=-2) | 
 | 274 |             >>> d = Counter(a=1, b=2, c=3, d=4) | 
 | 275 |             >>> c.subtract(d) | 
 | 276 |             Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6}) | 
 | 277 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 278 |         .. versionadded:: 3.2 | 
| Ezio Melotti | 0be8b1c | 2010-04-04 06:53:44 +0000 | [diff] [blame] | 279 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 280 |     The usual dictionary methods are available for :class:`Counter` objects | 
 | 281 |     except for two which work differently for counters. | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 282 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 283 |     .. method:: fromkeys(iterable) | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 284 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 285 |         This class method is not implemented for :class:`Counter` objects. | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 286 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 287 |     .. method:: update([iterable-or-mapping]) | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 288 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 289 |         Elements are counted from an *iterable* or added-in from another | 
 | 290 |         *mapping* (or counter).  Like :meth:`dict.update` but adds counts | 
 | 291 |         instead of replacing them.  Also, the *iterable* is expected to be a | 
 | 292 |         sequence of elements, not a sequence of ``(key, value)`` pairs. | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 293 |  | 
 | 294 | Common patterns for working with :class:`Counter` objects:: | 
 | 295 |  | 
| Raymond Hettinger | 73662a5 | 2009-01-27 02:38:22 +0000 | [diff] [blame] | 296 |     sum(c.values())                 # total of all counts | 
 | 297 |     c.clear()                       # reset all counts | 
 | 298 |     list(c)                         # list unique elements | 
 | 299 |     set(c)                          # convert to a set | 
 | 300 |     dict(c)                         # convert to a regular dictionary | 
 | 301 |     c.items()                       # convert to a list of (elem, cnt) pairs | 
 | 302 |     Counter(dict(list_of_pairs))    # convert from a list of (elem, cnt) pairs | 
 | 303 |     c.most_common()[:-n:-1]         # n least common elements | 
| Raymond Hettinger | fcb393c | 2011-08-09 13:00:40 -0700 | [diff] [blame] | 304 |     +c                              # remove zero and negative counts | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 305 |  | 
| Raymond Hettinger | 72a95cc | 2009-02-25 22:51:40 +0000 | [diff] [blame] | 306 | Several mathematical operations are provided for combining :class:`Counter` | 
 | 307 | objects to produce multisets (counters that have counts greater than zero). | 
 | 308 | Addition and subtraction combine counters by adding or subtracting the counts | 
 | 309 | of corresponding elements.  Intersection and union return the minimum and | 
 | 310 | maximum of corresponding counts.  Each operation can accept inputs with signed | 
 | 311 | 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] | 312 |  | 
| Raymond Hettinger | e0d1b9f | 2009-01-21 20:36:27 +0000 | [diff] [blame] | 313 |     >>> c = Counter(a=3, b=1) | 
 | 314 |     >>> d = Counter(a=1, b=2) | 
| Raymond Hettinger | 73662a5 | 2009-01-27 02:38:22 +0000 | [diff] [blame] | 315 |     >>> c + d                       # add two counters together:  c[x] + d[x] | 
| Raymond Hettinger | 4d2073a | 2009-01-20 03:41:22 +0000 | [diff] [blame] | 316 |     Counter({'a': 4, 'b': 3}) | 
| Raymond Hettinger | 73662a5 | 2009-01-27 02:38:22 +0000 | [diff] [blame] | 317 |     >>> c - d                       # subtract (keeping only positive counts) | 
| Raymond Hettinger | 4d2073a | 2009-01-20 03:41:22 +0000 | [diff] [blame] | 318 |     Counter({'a': 2}) | 
| Raymond Hettinger | 73662a5 | 2009-01-27 02:38:22 +0000 | [diff] [blame] | 319 |     >>> c & d                       # intersection:  min(c[x], d[x]) | 
| Raymond Hettinger | 4d2073a | 2009-01-20 03:41:22 +0000 | [diff] [blame] | 320 |     Counter({'a': 1, 'b': 1}) | 
| Raymond Hettinger | 73662a5 | 2009-01-27 02:38:22 +0000 | [diff] [blame] | 321 |     >>> c | d                       # union:  max(c[x], d[x]) | 
| Raymond Hettinger | 4d2073a | 2009-01-20 03:41:22 +0000 | [diff] [blame] | 322 |     Counter({'a': 3, 'b': 2}) | 
 | 323 |  | 
| Raymond Hettinger | fcb393c | 2011-08-09 13:00:40 -0700 | [diff] [blame] | 324 | Unary addition and substraction are shortcuts for adding an empty counter | 
 | 325 | or subtracting from an empty counter. | 
 | 326 |  | 
 | 327 |     >>> c = Counter(a=2, b=-4) | 
 | 328 |     >>> +c | 
 | 329 |     Counter({'a': 2}) | 
 | 330 |     >>> -c | 
 | 331 |     Counter({'b': 4}) | 
 | 332 |  | 
 | 333 | .. versionadded:: 3.3 | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 334 |     Added support for unary plus, unary minus, and in-place multiset operations. | 
| Raymond Hettinger | fcb393c | 2011-08-09 13:00:40 -0700 | [diff] [blame] | 335 |  | 
| Raymond Hettinger | 22f1885 | 2010-04-12 21:45:14 +0000 | [diff] [blame] | 336 | .. note:: | 
 | 337 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 338 |     Counters were primarily designed to work with positive integers to represent | 
 | 339 |     running counts; however, care was taken to not unnecessarily preclude use | 
 | 340 |     cases needing other types or negative values.  To help with those use cases, | 
 | 341 |     this section documents the minimum range and type restrictions. | 
| Raymond Hettinger | 22f1885 | 2010-04-12 21:45:14 +0000 | [diff] [blame] | 342 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 343 |     * The :class:`Counter` class itself is a dictionary subclass with no | 
 | 344 |         restrictions on its keys and values.  The values are intended to be numbers | 
 | 345 |         representing counts, but you *could* store anything in the value field. | 
| Raymond Hettinger | 22f1885 | 2010-04-12 21:45:14 +0000 | [diff] [blame] | 346 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 347 |     * The :meth:`most_common` method requires only that the values be orderable. | 
| Raymond Hettinger | 22f1885 | 2010-04-12 21:45:14 +0000 | [diff] [blame] | 348 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 349 |     * For in-place operations such as ``c[key] += 1``, the value type need only | 
 | 350 |         support addition and subtraction.  So fractions, floats, and decimals would | 
 | 351 |         work and negative values are supported.  The same is also true for | 
 | 352 |         :meth:`update` and :meth:`subtract` which allow negative and zero values | 
 | 353 |         for both inputs and outputs. | 
| Raymond Hettinger | 22f1885 | 2010-04-12 21:45:14 +0000 | [diff] [blame] | 354 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 355 |     * The multiset methods are designed only for use cases with positive values. | 
 | 356 |         The inputs may be negative or zero, but only outputs with positive values | 
 | 357 |         are created.  There are no type restrictions, but the value type needs to | 
 | 358 |         support addition, subtraction, and comparison. | 
| Raymond Hettinger | 22f1885 | 2010-04-12 21:45:14 +0000 | [diff] [blame] | 359 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 360 |     * The :meth:`elements` method requires integer counts.  It ignores zero and | 
 | 361 |         negative counts. | 
| Raymond Hettinger | 22f1885 | 2010-04-12 21:45:14 +0000 | [diff] [blame] | 362 |  | 
| Raymond Hettinger | b14043c | 2009-01-20 23:44:31 +0000 | [diff] [blame] | 363 | .. seealso:: | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 364 |  | 
| Raymond Hettinger | 94adc8e | 2009-01-22 05:27:37 +0000 | [diff] [blame] | 365 |     * `Counter class <http://code.activestate.com/recipes/576611/>`_ | 
| Raymond Hettinger | bfcb429 | 2012-06-10 11:39:44 -0700 | [diff] [blame] | 366 |       adapted for Python 2.5 and an early `Bag recipe | 
 | 367 |       <http://code.activestate.com/recipes/259174/>`_ for Python 2.4. | 
| Raymond Hettinger | 94adc8e | 2009-01-22 05:27:37 +0000 | [diff] [blame] | 368 |  | 
| Raymond Hettinger | b14043c | 2009-01-20 23:44:31 +0000 | [diff] [blame] | 369 |     * `Bag class <http://www.gnu.org/software/smalltalk/manual-base/html_node/Bag.html>`_ | 
| Raymond Hettinger | bfcb429 | 2012-06-10 11:39:44 -0700 | [diff] [blame] | 370 |       in Smalltalk. | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 371 |  | 
| Éric Araujo | 08c9bd5 | 2011-04-24 02:59:02 +0200 | [diff] [blame] | 372 |     * Wikipedia entry for `Multisets <http://en.wikipedia.org/wiki/Multiset>`_. | 
| Raymond Hettinger | b8baf63 | 2009-01-14 02:20:07 +0000 | [diff] [blame] | 373 |  | 
| Raymond Hettinger | b14043c | 2009-01-20 23:44:31 +0000 | [diff] [blame] | 374 |     * `C++ multisets <http://www.demo2s.com/Tutorial/Cpp/0380__set-multiset/Catalog0380__set-multiset.htm>`_ | 
| Raymond Hettinger | bfcb429 | 2012-06-10 11:39:44 -0700 | [diff] [blame] | 375 |       tutorial with examples. | 
| Raymond Hettinger | b14043c | 2009-01-20 23:44:31 +0000 | [diff] [blame] | 376 |  | 
| Raymond Hettinger | 94adc8e | 2009-01-22 05:27:37 +0000 | [diff] [blame] | 377 |     * For mathematical operations on multisets and their use cases, see | 
| Raymond Hettinger | bfcb429 | 2012-06-10 11:39:44 -0700 | [diff] [blame] | 378 |       *Knuth, Donald. The Art of Computer Programming Volume II, | 
 | 379 |       Section 4.6.3, Exercise 19*. | 
| Raymond Hettinger | b14043c | 2009-01-20 23:44:31 +0000 | [diff] [blame] | 380 |  | 
| Raymond Hettinger | 670eaec | 2009-01-21 23:14:07 +0000 | [diff] [blame] | 381 |     * To enumerate all distinct multisets of a given size over a given set of | 
| Raymond Hettinger | bfcb429 | 2012-06-10 11:39:44 -0700 | [diff] [blame] | 382 |       elements, see :func:`itertools.combinations_with_replacement`. | 
| Raymond Hettinger | b14043c | 2009-01-20 23:44:31 +0000 | [diff] [blame] | 383 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 384 |             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] | 385 |  | 
 | 386 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 387 | :class:`deque` objects | 
 | 388 | ---------------------- | 
 | 389 |  | 
| Georg Brandl | c2a4f4f | 2009-04-10 09:03:43 +0000 | [diff] [blame] | 390 | .. class:: deque([iterable, [maxlen]]) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 391 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 392 |     Returns a new deque object initialized left-to-right (using :meth:`append`) with | 
 | 393 |     data from *iterable*.  If *iterable* is not specified, the new deque is empty. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 394 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 395 |     Deques are a generalization of stacks and queues (the name is pronounced "deck" | 
 | 396 |     and is short for "double-ended queue").  Deques support thread-safe, memory | 
 | 397 |     efficient appends and pops from either side of the deque with approximately the | 
 | 398 |     same O(1) performance in either direction. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 399 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 400 |     Though :class:`list` objects support similar operations, they are optimized for | 
 | 401 |     fast fixed-length operations and incur O(n) memory movement costs for | 
 | 402 |     ``pop(0)`` and ``insert(0, v)`` operations which change both the size and | 
 | 403 |     position of the underlying data representation. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 404 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 405 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 406 |     If *maxlen* is not specified or is *None*, deques may grow to an | 
 | 407 |     arbitrary length.  Otherwise, the deque is bounded to the specified maximum | 
 | 408 |     length.  Once a bounded length deque is full, when new items are added, a | 
 | 409 |     corresponding number of items are discarded from the opposite end.  Bounded | 
 | 410 |     length deques provide functionality similar to the ``tail`` filter in | 
 | 411 |     Unix. They are also useful for tracking transactions and other pools of data | 
 | 412 |     where only the most recent activity is of interest. | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 413 |  | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 414 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 415 |     Deque objects support the following methods: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 416 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 417 |     .. method:: append(x) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 418 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 419 |         Add *x* to the right side of the deque. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 420 |  | 
 | 421 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 422 |     .. method:: appendleft(x) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 423 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 424 |         Add *x* to the left side of the deque. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 425 |  | 
 | 426 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 427 |     .. method:: clear() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 428 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 429 |         Remove all elements from the deque leaving it with length 0. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 430 |  | 
 | 431 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 432 |     .. method:: count(x) | 
| Raymond Hettinger | 44459de | 2010-04-03 23:20:46 +0000 | [diff] [blame] | 433 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 434 |         Count the number of deque elements equal to *x*. | 
| Raymond Hettinger | 44459de | 2010-04-03 23:20:46 +0000 | [diff] [blame] | 435 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 436 |         .. versionadded:: 3.2 | 
| Raymond Hettinger | 44459de | 2010-04-03 23:20:46 +0000 | [diff] [blame] | 437 |  | 
| Georg Brandl | 67b21b7 | 2010-08-17 15:07:14 +0000 | [diff] [blame] | 438 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 439 |     .. method:: extend(iterable) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 440 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 441 |         Extend the right side of the deque by appending elements from the iterable | 
 | 442 |         argument. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 443 |  | 
 | 444 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 445 |     .. method:: extendleft(iterable) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 446 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 447 |         Extend the left side of the deque by appending elements from *iterable*. | 
 | 448 |         Note, the series of left appends results in reversing the order of | 
 | 449 |         elements in the iterable argument. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 450 |  | 
 | 451 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 452 |     .. method:: pop() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 453 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 454 |         Remove and return an element from the right side of the deque. If no | 
 | 455 |         elements are present, raises an :exc:`IndexError`. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 456 |  | 
 | 457 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 458 |     .. method:: popleft() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 459 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 460 |         Remove and return an element from the left side of the deque. If no | 
 | 461 |         elements are present, raises an :exc:`IndexError`. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 462 |  | 
 | 463 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 464 |     .. method:: remove(value) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 465 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 466 |         Removed the first occurrence of *value*.  If not found, raises a | 
 | 467 |         :exc:`ValueError`. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 468 |  | 
| Georg Brandl | 67b21b7 | 2010-08-17 15:07:14 +0000 | [diff] [blame] | 469 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 470 |     .. method:: reverse() | 
| Raymond Hettinger | e5fdedb | 2009-12-10 00:47:21 +0000 | [diff] [blame] | 471 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 472 |         Reverse the elements of the deque in-place and then return ``None``. | 
| Raymond Hettinger | e5fdedb | 2009-12-10 00:47:21 +0000 | [diff] [blame] | 473 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 474 |         .. versionadded:: 3.2 | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 475 |  | 
| Georg Brandl | 67b21b7 | 2010-08-17 15:07:14 +0000 | [diff] [blame] | 476 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 477 |     .. method:: rotate(n) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 478 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 479 |         Rotate the deque *n* steps to the right.  If *n* is negative, rotate to | 
 | 480 |         the left.  Rotating one step to the right is equivalent to: | 
 | 481 |         ``d.appendleft(d.pop())``. | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 482 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 483 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 484 |     Deque objects also provide one read-only attribute: | 
| Raymond Hettinger | 5bb0f0e | 2009-03-10 12:56:32 +0000 | [diff] [blame] | 485 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 486 |     .. attribute:: maxlen | 
| Raymond Hettinger | 5bb0f0e | 2009-03-10 12:56:32 +0000 | [diff] [blame] | 487 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 488 |         Maximum size of a deque or *None* if unbounded. | 
| Raymond Hettinger | 5bb0f0e | 2009-03-10 12:56:32 +0000 | [diff] [blame] | 489 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 490 |         .. versionadded:: 3.1 | 
| Raymond Hettinger | 5bb0f0e | 2009-03-10 12:56:32 +0000 | [diff] [blame] | 491 |  | 
 | 492 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 493 | In addition to the above, deques support iteration, pickling, ``len(d)``, | 
 | 494 | ``reversed(d)``, ``copy.copy(d)``, ``copy.deepcopy(d)``, membership testing with | 
| Benjamin Peterson | 206e307 | 2008-10-19 14:07:49 +0000 | [diff] [blame] | 495 | the :keyword:`in` operator, and subscript references such as ``d[-1]``.  Indexed | 
 | 496 | access is O(1) at both ends but slows to O(n) in the middle.  For fast random | 
 | 497 | access, use lists instead. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 498 |  | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 499 | Example: | 
 | 500 |  | 
 | 501 | .. doctest:: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 502 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 503 |     >>> from collections import deque | 
 | 504 |     >>> d = deque('ghi')                 # make a new deque with three items | 
 | 505 |     >>> for elem in d:                   # iterate over the deque's elements | 
 | 506 |     ...     print(elem.upper()) | 
 | 507 |     G | 
 | 508 |     H | 
 | 509 |     I | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 510 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 511 |     >>> d.append('j')                    # add a new entry to the right side | 
 | 512 |     >>> d.appendleft('f')                # add a new entry to the left side | 
 | 513 |     >>> d                                # show the representation of the deque | 
 | 514 |     deque(['f', 'g', 'h', 'i', 'j']) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 515 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 516 |     >>> d.pop()                          # return and remove the rightmost item | 
 | 517 |     'j' | 
 | 518 |     >>> d.popleft()                      # return and remove the leftmost item | 
 | 519 |     'f' | 
 | 520 |     >>> list(d)                          # list the contents of the deque | 
 | 521 |     ['g', 'h', 'i'] | 
 | 522 |     >>> d[0]                             # peek at leftmost item | 
 | 523 |     'g' | 
 | 524 |     >>> d[-1]                            # peek at rightmost item | 
 | 525 |     'i' | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 526 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 527 |     >>> list(reversed(d))                # list the contents of a deque in reverse | 
 | 528 |     ['i', 'h', 'g'] | 
 | 529 |     >>> 'h' in d                         # search the deque | 
 | 530 |     True | 
 | 531 |     >>> d.extend('jkl')                  # add multiple elements at once | 
 | 532 |     >>> d | 
 | 533 |     deque(['g', 'h', 'i', 'j', 'k', 'l']) | 
 | 534 |     >>> d.rotate(1)                      # right rotation | 
 | 535 |     >>> d | 
 | 536 |     deque(['l', 'g', 'h', 'i', 'j', 'k']) | 
 | 537 |     >>> d.rotate(-1)                     # left rotation | 
 | 538 |     >>> d | 
 | 539 |     deque(['g', 'h', 'i', 'j', 'k', 'l']) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 540 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 541 |     >>> deque(reversed(d))               # make a new deque in reverse order | 
 | 542 |     deque(['l', 'k', 'j', 'i', 'h', 'g']) | 
 | 543 |     >>> d.clear()                        # empty the deque | 
 | 544 |     >>> d.pop()                          # cannot pop from an empty deque | 
 | 545 |     Traceback (most recent call last): | 
 | 546 |         File "<pyshell#6>", line 1, in -toplevel- | 
 | 547 |             d.pop() | 
 | 548 |     IndexError: pop from an empty deque | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 549 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 550 |     >>> d.extendleft('abc')              # extendleft() reverses the input order | 
 | 551 |     >>> d | 
 | 552 |     deque(['c', 'b', 'a']) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 553 |  | 
 | 554 |  | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 555 | :class:`deque` Recipes | 
 | 556 | ^^^^^^^^^^^^^^^^^^^^^^ | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 557 |  | 
 | 558 | This section shows various approaches to working with deques. | 
 | 559 |  | 
| Raymond Hettinger | d2ee64d | 2009-03-31 22:52:48 +0000 | [diff] [blame] | 560 | Bounded length deques provide functionality similar to the ``tail`` filter | 
 | 561 | in Unix:: | 
 | 562 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 563 |     def tail(filename, n=10): | 
 | 564 |         'Return the last n lines of a file' | 
 | 565 |         with open(filename) as f: | 
 | 566 |             return deque(f, n) | 
| Raymond Hettinger | d2ee64d | 2009-03-31 22:52:48 +0000 | [diff] [blame] | 567 |  | 
 | 568 | Another approach to using deques is to maintain a sequence of recently | 
 | 569 | added elements by appending to the right and popping to the left:: | 
 | 570 |  | 
 | 571 |     def moving_average(iterable, n=3): | 
 | 572 |         # moving_average([40, 30, 50, 46, 39, 44]) --> 40.0 42.0 45.0 43.0 | 
 | 573 |         # http://en.wikipedia.org/wiki/Moving_average | 
 | 574 |         it = iter(iterable) | 
| Raymond Hettinger | d40285a | 2009-05-22 01:11:26 +0000 | [diff] [blame] | 575 |         d = deque(itertools.islice(it, n-1)) | 
 | 576 |         d.appendleft(0) | 
| Raymond Hettinger | d2ee64d | 2009-03-31 22:52:48 +0000 | [diff] [blame] | 577 |         s = sum(d) | 
| Raymond Hettinger | d2ee64d | 2009-03-31 22:52:48 +0000 | [diff] [blame] | 578 |         for elem in it: | 
 | 579 |             s += elem - d.popleft() | 
 | 580 |             d.append(elem) | 
 | 581 |             yield s / n | 
 | 582 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 583 | The :meth:`rotate` method provides a way to implement :class:`deque` slicing and | 
| Ezio Melotti | 0639d5a | 2009-12-19 23:26:38 +0000 | [diff] [blame] | 584 | 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] | 585 | the :meth:`rotate` method to position elements to be popped:: | 
 | 586 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 587 |     def delete_nth(d, n): | 
 | 588 |         d.rotate(-n) | 
 | 589 |         d.popleft() | 
 | 590 |         d.rotate(n) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 591 |  | 
 | 592 | To implement :class:`deque` slicing, use a similar approach applying | 
 | 593 | :meth:`rotate` to bring a target element to the left side of the deque. Remove | 
 | 594 | old entries with :meth:`popleft`, add new entries with :meth:`extend`, and then | 
 | 595 | reverse the rotation. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 596 | With minor variations on that approach, it is easy to implement Forth style | 
 | 597 | stack manipulations such as ``dup``, ``drop``, ``swap``, ``over``, ``pick``, | 
 | 598 | ``rot``, and ``roll``. | 
 | 599 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 600 |  | 
 | 601 | :class:`defaultdict` objects | 
 | 602 | ---------------------------- | 
 | 603 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 604 | .. class:: defaultdict([default_factory[, ...]]) | 
 | 605 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 606 |     Returns a new dictionary-like object.  :class:`defaultdict` is a subclass of the | 
 | 607 |     built-in :class:`dict` class.  It overrides one method and adds one writable | 
 | 608 |     instance variable.  The remaining functionality is the same as for the | 
 | 609 |     :class:`dict` class and is not documented here. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 610 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 611 |     The first argument provides the initial value for the :attr:`default_factory` | 
 | 612 |     attribute; it defaults to ``None``. All remaining arguments are treated the same | 
 | 613 |     as if they were passed to the :class:`dict` constructor, including keyword | 
 | 614 |     arguments. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 615 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 616 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 617 |     :class:`defaultdict` objects support the following method in addition to the | 
 | 618 |     standard :class:`dict` operations: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 619 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 620 |     .. method:: __missing__(key) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 621 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 622 |         If the :attr:`default_factory` attribute is ``None``, this raises a | 
 | 623 |         :exc:`KeyError` exception with the *key* as argument. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 624 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 625 |         If :attr:`default_factory` is not ``None``, it is called without arguments | 
 | 626 |         to provide a default value for the given *key*, this value is inserted in | 
 | 627 |         the dictionary for the *key*, and returned. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 628 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 629 |         If calling :attr:`default_factory` raises an exception this exception is | 
 | 630 |         propagated unchanged. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 631 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 632 |         This method is called by the :meth:`__getitem__` method of the | 
 | 633 |         :class:`dict` class when the requested key is not found; whatever it | 
 | 634 |         returns or raises is then returned or raised by :meth:`__getitem__`. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 635 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 636 |         Note that :meth:`__missing__` is *not* called for any operations besides | 
 | 637 |         :meth:`__getitem__`. This means that :meth:`get` will, like normal | 
 | 638 |         dictionaries, return ``None`` as a default rather than using | 
 | 639 |         :attr:`default_factory`. | 
| Benjamin Peterson | 871b9d1 | 2012-01-27 09:14:01 -0500 | [diff] [blame] | 640 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 641 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 642 |     :class:`defaultdict` objects support the following instance variable: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 643 |  | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 644 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 645 |     .. attribute:: default_factory | 
| Benjamin Peterson | e41251e | 2008-04-25 01:59:09 +0000 | [diff] [blame] | 646 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 647 |         This attribute is used by the :meth:`__missing__` method; it is | 
 | 648 |         initialized from the first argument to the constructor, if present, or to | 
 | 649 |         ``None``, if absent. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 650 |  | 
 | 651 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 652 | :class:`defaultdict` Examples | 
 | 653 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | 
 | 654 |  | 
 | 655 | 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] | 656 | sequence of key-value pairs into a dictionary of lists: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 657 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 658 |     >>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)] | 
 | 659 |     >>> d = defaultdict(list) | 
 | 660 |     >>> for k, v in s: | 
 | 661 |     ...     d[k].append(v) | 
 | 662 |     ... | 
 | 663 |     >>> list(d.items()) | 
 | 664 |     [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])] | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 665 |  | 
 | 666 | When each key is encountered for the first time, it is not already in the | 
 | 667 | mapping; so an entry is automatically created using the :attr:`default_factory` | 
 | 668 | function which returns an empty :class:`list`.  The :meth:`list.append` | 
 | 669 | operation then attaches the value to the new list.  When keys are encountered | 
 | 670 | again, the look-up proceeds normally (returning the list for that key) and the | 
 | 671 | :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] | 672 | simpler and faster than an equivalent technique using :meth:`dict.setdefault`: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 673 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 674 |     >>> d = {} | 
 | 675 |     >>> for k, v in s: | 
 | 676 |     ...     d.setdefault(k, []).append(v) | 
 | 677 |     ... | 
 | 678 |     >>> list(d.items()) | 
 | 679 |     [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])] | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 680 |  | 
 | 681 | Setting the :attr:`default_factory` to :class:`int` makes the | 
 | 682 | :class:`defaultdict` useful for counting (like a bag or multiset in other | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 683 | languages): | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 684 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 685 |     >>> s = 'mississippi' | 
 | 686 |     >>> d = defaultdict(int) | 
 | 687 |     >>> for k in s: | 
 | 688 |     ...     d[k] += 1 | 
 | 689 |     ... | 
 | 690 |     >>> list(d.items()) | 
 | 691 |     [('i', 4), ('p', 2), ('s', 4), ('m', 1)] | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 692 |  | 
 | 693 | When a letter is first encountered, it is missing from the mapping, so the | 
 | 694 | :attr:`default_factory` function calls :func:`int` to supply a default count of | 
 | 695 | zero.  The increment operation then builds up the count for each letter. | 
 | 696 |  | 
 | 697 | The function :func:`int` which always returns zero is just a special case of | 
 | 698 | constant functions.  A faster and more flexible way to create constant functions | 
 | 699 | 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] | 700 | zero): | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 701 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 702 |     >>> def constant_factory(value): | 
 | 703 |     ...     return lambda: value | 
 | 704 |     >>> d = defaultdict(constant_factory('<missing>')) | 
 | 705 |     >>> d.update(name='John', action='ran') | 
 | 706 |     >>> '%(name)s %(action)s to %(object)s' % d | 
 | 707 |     'John ran to <missing>' | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 708 |  | 
 | 709 | Setting the :attr:`default_factory` to :class:`set` makes the | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 710 | :class:`defaultdict` useful for building a dictionary of sets: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 711 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 712 |     >>> s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)] | 
 | 713 |     >>> d = defaultdict(set) | 
 | 714 |     >>> for k, v in s: | 
 | 715 |     ...     d[k].add(v) | 
 | 716 |     ... | 
 | 717 |     >>> list(d.items()) | 
 | 718 |     [('blue', {2, 4}), ('red', {1, 3})] | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 719 |  | 
 | 720 |  | 
| Guido van Rossum | 3d392eb | 2007-11-16 00:35:22 +0000 | [diff] [blame] | 721 | :func:`namedtuple` Factory Function for Tuples with Named Fields | 
| Christian Heimes | 790c823 | 2008-01-07 21:14:23 +0000 | [diff] [blame] | 722 | ---------------------------------------------------------------- | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 723 |  | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 724 | Named tuples assign meaning to each position in a tuple and allow for more readable, | 
 | 725 | self-documenting code.  They can be used wherever regular tuples are used, and | 
 | 726 | 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] | 727 |  | 
| Georg Brandl | c2a4f4f | 2009-04-10 09:03:43 +0000 | [diff] [blame] | 728 | .. function:: namedtuple(typename, field_names, verbose=False, rename=False) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 729 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 730 |     Returns a new tuple subclass named *typename*.  The new subclass is used to | 
 | 731 |     create tuple-like objects that have fields accessible by attribute lookup as | 
 | 732 |     well as being indexable and iterable.  Instances of the subclass also have a | 
 | 733 |     helpful docstring (with typename and field_names) and a helpful :meth:`__repr__` | 
 | 734 |     method which lists the tuple contents in a ``name=value`` format. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 735 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 736 |     The *field_names* are a single string with each fieldname separated by whitespace | 
 | 737 |     and/or commas, for example ``'x y'`` or ``'x, y'``.  Alternatively, *field_names* | 
 | 738 |     can be a sequence of strings such as ``['x', 'y']``. | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 739 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 740 |     Any valid Python identifier may be used for a fieldname except for names | 
 | 741 |     starting with an underscore.  Valid identifiers consist of letters, digits, | 
 | 742 |     and underscores but do not start with a digit or underscore and cannot be | 
 | 743 |     a :mod:`keyword` such as *class*, *for*, *return*, *global*, *pass*, | 
 | 744 |     or *raise*. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 745 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 746 |     If *rename* is true, invalid fieldnames are automatically replaced | 
 | 747 |     with positional names.  For example, ``['abc', 'def', 'ghi', 'abc']`` is | 
 | 748 |     converted to ``['abc', '_1', 'ghi', '_3']``, eliminating the keyword | 
 | 749 |     ``def`` and the duplicate fieldname ``abc``. | 
| Benjamin Peterson | a86f2c0 | 2009-02-10 02:41:10 +0000 | [diff] [blame] | 750 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 751 |     If *verbose* is true, the class definition is printed after it is | 
 | 752 |     built.  This option is outdated; instead, it is simpler to print the | 
 | 753 |     :attr:`_source` attribute. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 754 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 755 |     Named tuple instances do not have per-instance dictionaries, so they are | 
 | 756 |     lightweight and require no more memory than regular tuples. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 757 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 758 |     .. versionchanged:: 3.1 | 
 | 759 |         Added support for *rename*. | 
| Benjamin Peterson | a86f2c0 | 2009-02-10 02:41:10 +0000 | [diff] [blame] | 760 |  | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 761 |  | 
 | 762 | .. doctest:: | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 763 |     :options: +NORMALIZE_WHITESPACE | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 764 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 765 |     >>> # Basic example | 
 | 766 |     >>> Point = namedtuple('Point', ['x', 'y']) | 
 | 767 |     >>> p = Point(11, y=22)     # instantiate with positional or keyword arguments | 
 | 768 |     >>> p[0] + p[1]             # indexable like the plain tuple (11, 22) | 
 | 769 |     33 | 
 | 770 |     >>> x, y = p                # unpack like a regular tuple | 
 | 771 |     >>> x, y | 
 | 772 |     (11, 22) | 
 | 773 |     >>> p.x + p.y               # fields also accessible by name | 
 | 774 |     33 | 
 | 775 |     >>> p                       # readable __repr__ with a name=value style | 
 | 776 |     Point(x=11, y=22) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 777 |  | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 778 | Named tuples are especially useful for assigning field names to result tuples returned | 
 | 779 | by the :mod:`csv` or :mod:`sqlite3` modules:: | 
 | 780 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 781 |     EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade') | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 782 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 783 |     import csv | 
 | 784 |     for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))): | 
 | 785 |         print(emp.name, emp.title) | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 786 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 787 |     import sqlite3 | 
 | 788 |     conn = sqlite3.connect('/companydata') | 
 | 789 |     cursor = conn.cursor() | 
 | 790 |     cursor.execute('SELECT name, age, title, department, paygrade FROM employees') | 
 | 791 |     for emp in map(EmployeeRecord._make, cursor.fetchall()): | 
 | 792 |         print(emp.name, emp.title) | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 793 |  | 
| Christian Heimes | 99170a5 | 2007-12-19 02:07:34 +0000 | [diff] [blame] | 794 | In addition to the methods inherited from tuples, named tuples support | 
| Raymond Hettinger | 2ebea41 | 2011-03-23 12:52:23 -0700 | [diff] [blame] | 795 | three additional methods and two attributes.  To prevent conflicts with | 
| Christian Heimes | 2380ac7 | 2008-01-09 00:17:24 +0000 | [diff] [blame] | 796 | field names, the method and attribute names start with an underscore. | 
| Christian Heimes | 99170a5 | 2007-12-19 02:07:34 +0000 | [diff] [blame] | 797 |  | 
| Benjamin Peterson | 0b9fb80 | 2010-07-18 14:23:36 +0000 | [diff] [blame] | 798 | .. classmethod:: somenamedtuple._make(iterable) | 
| Christian Heimes | 99170a5 | 2007-12-19 02:07:34 +0000 | [diff] [blame] | 799 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 800 |     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] | 801 |  | 
| Raymond Hettinger | 6fed9fd | 2012-06-11 00:38:14 -0700 | [diff] [blame] | 802 |     .. doctest:: | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 803 |  | 
| Raymond Hettinger | 6fed9fd | 2012-06-11 00:38:14 -0700 | [diff] [blame] | 804 |         >>> t = [11, 22] | 
 | 805 |         >>> Point._make(t) | 
 | 806 |         Point(x=11, y=22) | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 807 |  | 
| Christian Heimes | 790c823 | 2008-01-07 21:14:23 +0000 | [diff] [blame] | 808 | .. method:: somenamedtuple._asdict() | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 809 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 810 |     Return a new :class:`OrderedDict` which maps field names to their corresponding | 
 | 811 |     values.  Note, this method is no longer needed now that the same effect can | 
 | 812 |     be achieved by using the built-in :func:`vars` function:: | 
| Georg Brandl | 9afde1c | 2007-11-01 20:32:30 +0000 | [diff] [blame] | 813 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 814 |         >>> vars(p) | 
 | 815 |         OrderedDict([('x', 11), ('y', 22)]) | 
| Raymond Hettinger | a4f52b1 | 2009-03-02 22:28:31 +0000 | [diff] [blame] | 816 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 817 |     .. versionchanged:: 3.1 | 
 | 818 |         Returns an :class:`OrderedDict` instead of a regular :class:`dict`. | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 819 |  | 
| Christian Heimes | 790c823 | 2008-01-07 21:14:23 +0000 | [diff] [blame] | 820 | .. method:: somenamedtuple._replace(kwargs) | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 821 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 822 |     Return a new instance of the named tuple replacing specified fields with new | 
| Raymond Hettinger | 6fed9fd | 2012-06-11 00:38:14 -0700 | [diff] [blame] | 823 |     values:: | 
| Thomas Wouters | 8ce81f7 | 2007-09-20 18:22:40 +0000 | [diff] [blame] | 824 |  | 
| Raymond Hettinger | 6fed9fd | 2012-06-11 00:38:14 -0700 | [diff] [blame] | 825 |         >>> p = Point(x=11, y=22) | 
 | 826 |         >>> p._replace(x=33) | 
 | 827 |         Point(x=33, y=22) | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 828 |  | 
| Raymond Hettinger | 6fed9fd | 2012-06-11 00:38:14 -0700 | [diff] [blame] | 829 |         >>> for partnum, record in inventory.items(): | 
 | 830 |         ...     inventory[partnum] = record._replace(price=newprices[partnum], timestamp=time.now()) | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 831 |  | 
| Raymond Hettinger | 2ebea41 | 2011-03-23 12:52:23 -0700 | [diff] [blame] | 832 | .. attribute:: somenamedtuple._source | 
 | 833 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 834 |     A string with the pure Python source code used to create the named | 
 | 835 |     tuple class.  The source makes the named tuple self-documenting. | 
 | 836 |     It can be printed, executed using :func:`exec`, or saved to a file | 
 | 837 |     and imported. | 
| Raymond Hettinger | 2ebea41 | 2011-03-23 12:52:23 -0700 | [diff] [blame] | 838 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 839 |     .. versionadded:: 3.3 | 
| Raymond Hettinger | 2ebea41 | 2011-03-23 12:52:23 -0700 | [diff] [blame] | 840 |  | 
| Christian Heimes | 790c823 | 2008-01-07 21:14:23 +0000 | [diff] [blame] | 841 | .. attribute:: somenamedtuple._fields | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 842 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 843 |     Tuple of strings listing the field names.  Useful for introspection | 
 | 844 |     and for creating new named tuple types from existing named tuples. | 
| Thomas Wouters | 8ce81f7 | 2007-09-20 18:22:40 +0000 | [diff] [blame] | 845 |  | 
| Raymond Hettinger | 6fed9fd | 2012-06-11 00:38:14 -0700 | [diff] [blame] | 846 |     .. doctest:: | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 847 |  | 
| Raymond Hettinger | 6fed9fd | 2012-06-11 00:38:14 -0700 | [diff] [blame] | 848 |         >>> p._fields            # view the field names | 
 | 849 |         ('x', 'y') | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 850 |  | 
| Raymond Hettinger | 6fed9fd | 2012-06-11 00:38:14 -0700 | [diff] [blame] | 851 |         >>> Color = namedtuple('Color', 'red green blue') | 
 | 852 |         >>> Pixel = namedtuple('Pixel', Point._fields + Color._fields) | 
 | 853 |         >>> Pixel(11, 22, 128, 255, 0) | 
 | 854 |         Pixel(x=11, y=22, red=128, green=255, blue=0) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 855 |  | 
| Christian Heimes | 0449f63 | 2007-12-15 01:27:15 +0000 | [diff] [blame] | 856 | 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] | 857 | function: | 
| Christian Heimes | 0449f63 | 2007-12-15 01:27:15 +0000 | [diff] [blame] | 858 |  | 
 | 859 |     >>> getattr(p, 'x') | 
 | 860 |     11 | 
 | 861 |  | 
| Raymond Hettinger | 651453a | 2009-02-11 00:20:02 +0000 | [diff] [blame] | 862 | To convert a dictionary to a named tuple, use the double-star-operator | 
 | 863 | (as described in :ref:`tut-unpacking-arguments`): | 
| Christian Heimes | 99170a5 | 2007-12-19 02:07:34 +0000 | [diff] [blame] | 864 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 865 |     >>> d = {'x': 11, 'y': 22} | 
 | 866 |     >>> Point(**d) | 
 | 867 |     Point(x=11, y=22) | 
| Christian Heimes | 99170a5 | 2007-12-19 02:07:34 +0000 | [diff] [blame] | 868 |  | 
| Guido van Rossum | 3d392eb | 2007-11-16 00:35:22 +0000 | [diff] [blame] | 869 | 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] | 870 | 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] | 871 | a fixed-width print format: | 
| Guido van Rossum | 3d392eb | 2007-11-16 00:35:22 +0000 | [diff] [blame] | 872 |  | 
| Christian Heimes | 043d6f6 | 2008-01-07 17:19:16 +0000 | [diff] [blame] | 873 |     >>> class Point(namedtuple('Point', 'x y')): | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 874 |         __slots__ = () | 
 | 875 |         @property | 
 | 876 |         def hypot(self): | 
 | 877 |             return (self.x ** 2 + self.y ** 2) ** 0.5 | 
 | 878 |         def __str__(self): | 
 | 879 |             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] | 880 |  | 
| Georg Brandl | 0df7979 | 2008-10-04 18:33:26 +0000 | [diff] [blame] | 881 |     >>> for p in Point(3, 4), Point(14, 5/7): | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 882 |         print(p) | 
| Christian Heimes | 25bb783 | 2008-01-11 16:17:00 +0000 | [diff] [blame] | 883 |     Point: x= 3.000  y= 4.000  hypot= 5.000 | 
 | 884 |     Point: x=14.000  y= 0.714  hypot=14.018 | 
| Christian Heimes | 043d6f6 | 2008-01-07 17:19:16 +0000 | [diff] [blame] | 885 |  | 
| Georg Brandl | af5c238 | 2009-12-28 08:02:38 +0000 | [diff] [blame] | 886 | The subclass shown above sets ``__slots__`` to an empty tuple.  This helps | 
| Christian Heimes | 679db4a | 2008-01-18 09:56:22 +0000 | [diff] [blame] | 887 | keep memory requirements low by preventing the creation of instance dictionaries. | 
 | 888 |  | 
| Christian Heimes | 2380ac7 | 2008-01-09 00:17:24 +0000 | [diff] [blame] | 889 | Subclassing is not useful for adding new, stored fields.  Instead, simply | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 890 | create a new named tuple type from the :attr:`_fields` attribute: | 
| Christian Heimes | 2380ac7 | 2008-01-09 00:17:24 +0000 | [diff] [blame] | 891 |  | 
| Christian Heimes | 25bb783 | 2008-01-11 16:17:00 +0000 | [diff] [blame] | 892 |     >>> Point3D = namedtuple('Point3D', Point._fields + ('z',)) | 
| Christian Heimes | 2380ac7 | 2008-01-09 00:17:24 +0000 | [diff] [blame] | 893 |  | 
 | 894 | Default values can be implemented by using :meth:`_replace` to | 
| Christian Heimes | fe337bf | 2008-03-23 21:54:12 +0000 | [diff] [blame] | 895 | customize a prototype instance: | 
| Guido van Rossum | 3d392eb | 2007-11-16 00:35:22 +0000 | [diff] [blame] | 896 |  | 
 | 897 |     >>> Account = namedtuple('Account', 'owner balance transaction_count') | 
| Christian Heimes | 587c2bf | 2008-01-19 16:21:02 +0000 | [diff] [blame] | 898 |     >>> default_account = Account('<owner name>', 0.0, 0) | 
 | 899 |     >>> johns_account = default_account._replace(owner='John') | 
| Raymond Hettinger | b2d0945 | 2011-03-22 22:36:21 -0700 | [diff] [blame] | 900 |     >>> janes_account = default_account._replace(owner='Jane') | 
| Guido van Rossum | 3d392eb | 2007-11-16 00:35:22 +0000 | [diff] [blame] | 901 |  | 
| Christian Heimes | e4ca815 | 2008-05-08 17:18:53 +0000 | [diff] [blame] | 902 | Enumerated constants can be implemented with named tuples, but it is simpler | 
 | 903 | and more efficient to use a simple class declaration: | 
 | 904 |  | 
 | 905 |     >>> Status = namedtuple('Status', 'open pending closed')._make(range(3)) | 
 | 906 |     >>> Status.open, Status.pending, Status.closed | 
 | 907 |     (0, 1, 2) | 
 | 908 |     >>> class Status: | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 909 |         open, pending, closed = range(3) | 
| Christian Heimes | e4ca815 | 2008-05-08 17:18:53 +0000 | [diff] [blame] | 910 |  | 
| Raymond Hettinger | 651453a | 2009-02-11 00:20:02 +0000 | [diff] [blame] | 911 | .. seealso:: | 
| Thomas Wouters | 47b49bf | 2007-08-30 22:15:33 +0000 | [diff] [blame] | 912 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 913 |     * `Named tuple recipe <http://code.activestate.com/recipes/500261/>`_ | 
| Raymond Hettinger | bfcb429 | 2012-06-10 11:39:44 -0700 | [diff] [blame] | 914 |       adapted for Python 2.4. | 
| Raymond Hettinger | 6c94e6f | 2011-03-31 15:46:06 -0700 | [diff] [blame] | 915 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 916 |     * `Recipe for named tuple abstract base class with a metaclass mix-in | 
| Raymond Hettinger | bfcb429 | 2012-06-10 11:39:44 -0700 | [diff] [blame] | 917 |       <http://code.activestate.com/recipes/577629-namedtupleabc-abstract-base-class-mix-in-for-named/>`_ | 
 | 918 |       by Jan Kaliszewski.  Besides providing an :term:`abstract base class` for | 
 | 919 |       named tuples, it also supports an alternate :term:`metaclass`-based | 
 | 920 |       constructor that is convenient for use cases where named tuples are being | 
 | 921 |       subclassed. | 
| Raymond Hettinger | e4c96ad | 2008-02-06 01:23:58 +0000 | [diff] [blame] | 922 |  | 
 | 923 |  | 
| Raymond Hettinger | 2d32f63 | 2009-03-02 21:24:57 +0000 | [diff] [blame] | 924 | :class:`OrderedDict` objects | 
 | 925 | ---------------------------- | 
 | 926 |  | 
 | 927 | Ordered dictionaries are just like regular dictionaries but they remember the | 
 | 928 | order that items were inserted.  When iterating over an ordered dictionary, | 
 | 929 | the items are returned in the order their keys were first added. | 
 | 930 |  | 
 | 931 | .. class:: OrderedDict([items]) | 
 | 932 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 933 |     Return an instance of a dict subclass, supporting the usual :class:`dict` | 
 | 934 |     methods.  An *OrderedDict* is a dict that remembers the order that keys | 
 | 935 |     were first inserted. If a new entry overwrites an existing entry, the | 
 | 936 |     original insertion position is left unchanged.  Deleting an entry and | 
 | 937 |     reinserting it will move it to the end. | 
| Raymond Hettinger | 2d32f63 | 2009-03-02 21:24:57 +0000 | [diff] [blame] | 938 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 939 |     .. versionadded:: 3.1 | 
| Raymond Hettinger | 2d32f63 | 2009-03-02 21:24:57 +0000 | [diff] [blame] | 940 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 941 |     .. method:: popitem(last=True) | 
| Raymond Hettinger | dc879f0 | 2009-03-19 20:30:56 +0000 | [diff] [blame] | 942 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 943 |         The :meth:`popitem` method for ordered dictionaries returns and removes a | 
 | 944 |         (key, value) pair.  The pairs are returned in LIFO order if *last* is true | 
 | 945 |         or FIFO order if false. | 
| Raymond Hettinger | 2d32f63 | 2009-03-02 21:24:57 +0000 | [diff] [blame] | 946 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 947 |     .. method:: move_to_end(key, last=True) | 
| Raymond Hettinger | f45abc9 | 2010-09-06 21:26:09 +0000 | [diff] [blame] | 948 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 949 |         Move an existing *key* to either end of an ordered dictionary.  The item | 
 | 950 |         is moved to the right end if *last* is true (the default) or to the | 
 | 951 |         beginning if *last* is false.  Raises :exc:`KeyError` if the *key* does | 
 | 952 |         not exist:: | 
| Raymond Hettinger | f45abc9 | 2010-09-06 21:26:09 +0000 | [diff] [blame] | 953 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 954 |             >>> d = OrderedDict.fromkeys('abcde') | 
 | 955 |             >>> d.move_to_end('b') | 
 | 956 |             >>> ''.join(d.keys()) | 
 | 957 |             'acdeb' | 
 | 958 |             >>> d.move_to_end('b', last=False) | 
 | 959 |             >>> ''.join(d.keys()) | 
 | 960 |             'bacde' | 
| Raymond Hettinger | f45abc9 | 2010-09-06 21:26:09 +0000 | [diff] [blame] | 961 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 962 |         .. versionadded:: 3.2 | 
| Raymond Hettinger | f45abc9 | 2010-09-06 21:26:09 +0000 | [diff] [blame] | 963 |  | 
| Raymond Hettinger | e909150 | 2009-05-19 17:40:07 +0000 | [diff] [blame] | 964 | In addition to the usual mapping methods, ordered dictionaries also support | 
 | 965 | reverse iteration using :func:`reversed`. | 
 | 966 |  | 
| Raymond Hettinger | 2d32f63 | 2009-03-02 21:24:57 +0000 | [diff] [blame] | 967 | Equality tests between :class:`OrderedDict` objects are order-sensitive | 
 | 968 | and are implemented as ``list(od1.items())==list(od2.items())``. | 
 | 969 | Equality tests between :class:`OrderedDict` objects and other | 
 | 970 | :class:`Mapping` objects are order-insensitive like regular dictionaries. | 
 | 971 | This allows :class:`OrderedDict` objects to be substituted anywhere a | 
 | 972 | regular dictionary is used. | 
 | 973 |  | 
| Raymond Hettinger | 3618078 | 2009-04-09 22:34:23 +0000 | [diff] [blame] | 974 | The :class:`OrderedDict` constructor and :meth:`update` method both accept | 
 | 975 | keyword arguments, but their order is lost because Python's function call | 
 | 976 | semantics pass-in keyword arguments using a regular unordered dictionary. | 
 | 977 |  | 
| Raymond Hettinger | dc879f0 | 2009-03-19 20:30:56 +0000 | [diff] [blame] | 978 | .. seealso:: | 
 | 979 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 980 |     `Equivalent OrderedDict recipe <http://code.activestate.com/recipes/576693/>`_ | 
 | 981 |     that runs on Python 2.4 or later. | 
| Raymond Hettinger | dc879f0 | 2009-03-19 20:30:56 +0000 | [diff] [blame] | 982 |  | 
| Raymond Hettinger | 7bba683 | 2011-04-15 17:43:19 -0700 | [diff] [blame] | 983 | :class:`OrderedDict` Examples and Recipes | 
 | 984 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | 
 | 985 |  | 
| Raymond Hettinger | 0e31201 | 2009-11-10 18:35:46 +0000 | [diff] [blame] | 986 | Since an ordered dictionary remembers its insertion order, it can be used | 
 | 987 | in conjuction with sorting to make a sorted dictionary:: | 
 | 988 |  | 
 | 989 |     >>> # regular unsorted dictionary | 
 | 990 |     >>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2} | 
 | 991 |  | 
 | 992 |     >>> # dictionary sorted by key | 
 | 993 |     >>> OrderedDict(sorted(d.items(), key=lambda t: t[0])) | 
 | 994 |     OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]) | 
 | 995 |  | 
 | 996 |     >>> # dictionary sorted by value | 
 | 997 |     >>> OrderedDict(sorted(d.items(), key=lambda t: t[1])) | 
 | 998 |     OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)]) | 
 | 999 |  | 
 | 1000 |     >>> # dictionary sorted by length of the key string | 
 | 1001 |     >>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0]))) | 
 | 1002 |     OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)]) | 
 | 1003 |  | 
 | 1004 | The new sorted dictionaries maintain their sort order when entries | 
 | 1005 | are deleted.  But when new keys are added, the keys are appended | 
 | 1006 | to the end and the sort is not maintained. | 
 | 1007 |  | 
| Raymond Hettinger | 4821ef8 | 2010-07-31 10:14:41 +0000 | [diff] [blame] | 1008 | It is also straight-forward to create an ordered dictionary variant | 
 | 1009 | that the remembers the order the keys were *last* inserted. | 
 | 1010 | If a new entry overwrites an existing entry, the | 
 | 1011 | original insertion position is changed and moved to the end:: | 
 | 1012 |  | 
 | 1013 |     class LastUpdatedOrderedDict(OrderedDict): | 
| Georg Brandl | 77570e2 | 2010-12-18 16:21:58 +0000 | [diff] [blame] | 1014 |         'Store items in the order the keys were last added' | 
| Raymond Hettinger | 7bba683 | 2011-04-15 17:43:19 -0700 | [diff] [blame] | 1015 |  | 
| Raymond Hettinger | 4821ef8 | 2010-07-31 10:14:41 +0000 | [diff] [blame] | 1016 |         def __setitem__(self, key, value): | 
 | 1017 |             if key in self: | 
 | 1018 |                 del self[key] | 
 | 1019 |             OrderedDict.__setitem__(self, key, value) | 
 | 1020 |  | 
| Éric Araujo | 889a7dc | 2011-08-19 00:40:46 +0200 | [diff] [blame] | 1021 | An ordered dictionary can be combined with the :class:`Counter` class | 
| Raymond Hettinger | 7bba683 | 2011-04-15 17:43:19 -0700 | [diff] [blame] | 1022 | so that the counter remembers the order elements are first encountered:: | 
 | 1023 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 1024 |     class OrderedCounter(Counter, OrderedDict): | 
| Raymond Hettinger | 7bba683 | 2011-04-15 17:43:19 -0700 | [diff] [blame] | 1025 |         'Counter that remembers the order elements are first encountered' | 
 | 1026 |  | 
| Raymond Hettinger | 7bba683 | 2011-04-15 17:43:19 -0700 | [diff] [blame] | 1027 |         def __repr__(self): | 
 | 1028 |             return '%s(%r)' % (self.__class__.__name__, OrderedDict(self)) | 
 | 1029 |  | 
 | 1030 |         def __reduce__(self): | 
 | 1031 |             return self.__class__, (OrderedDict(self),) | 
 | 1032 |  | 
| Raymond Hettinger | e4c96ad | 2008-02-06 01:23:58 +0000 | [diff] [blame] | 1033 |  | 
 | 1034 | :class:`UserDict` objects | 
| Mark Summerfield | 8f2d006 | 2008-02-06 13:30:44 +0000 | [diff] [blame] | 1035 | ------------------------- | 
| Raymond Hettinger | e4c96ad | 2008-02-06 01:23:58 +0000 | [diff] [blame] | 1036 |  | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 1037 | The class, :class:`UserDict` acts as a wrapper around dictionary objects. | 
 | 1038 | 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] | 1039 | subclass directly from :class:`dict`; however, this class can be easier | 
 | 1040 | to work with because the underlying dictionary is accessible as an | 
 | 1041 | attribute. | 
 | 1042 |  | 
 | 1043 | .. class:: UserDict([initialdata]) | 
 | 1044 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 1045 |     Class that simulates a dictionary.  The instance's contents are kept in a | 
 | 1046 |     regular dictionary, which is accessible via the :attr:`data` attribute of | 
 | 1047 |     :class:`UserDict` instances.  If *initialdata* is provided, :attr:`data` is | 
 | 1048 |     initialized with its contents; note that a reference to *initialdata* will not | 
 | 1049 |     be kept, allowing it be used for other purposes. | 
| Raymond Hettinger | e4c96ad | 2008-02-06 01:23:58 +0000 | [diff] [blame] | 1050 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 1051 |     In addition to supporting the methods and operations of mappings, | 
 | 1052 |     :class:`UserDict` instances provide the following attribute: | 
| Raymond Hettinger | e4c96ad | 2008-02-06 01:23:58 +0000 | [diff] [blame] | 1053 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 1054 |     .. attribute:: data | 
| Raymond Hettinger | e4c96ad | 2008-02-06 01:23:58 +0000 | [diff] [blame] | 1055 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 1056 |         A real dictionary used to store the contents of the :class:`UserDict` | 
 | 1057 |         class. | 
| Raymond Hettinger | 53dbe39 | 2008-02-12 20:03:09 +0000 | [diff] [blame] | 1058 |  | 
 | 1059 |  | 
 | 1060 |  | 
 | 1061 | :class:`UserList` objects | 
 | 1062 | ------------------------- | 
 | 1063 |  | 
 | 1064 | 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] | 1065 | 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] | 1066 | existing methods or add new ones.  In this way, one can add new behaviors to | 
 | 1067 | lists. | 
 | 1068 |  | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 1069 | 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] | 1070 | subclass directly from :class:`list`; however, this class can be easier | 
 | 1071 | to work with because the underlying list is accessible as an attribute. | 
 | 1072 |  | 
 | 1073 | .. class:: UserList([list]) | 
 | 1074 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 1075 |     Class that simulates a list.  The instance's contents are kept in a regular | 
 | 1076 |     list, which is accessible via the :attr:`data` attribute of :class:`UserList` | 
 | 1077 |     instances.  The instance's contents are initially set to a copy of *list*, | 
 | 1078 |     defaulting to the empty list ``[]``.  *list* can be any iterable, for | 
 | 1079 |     example a real Python list or a :class:`UserList` object. | 
| Raymond Hettinger | 53dbe39 | 2008-02-12 20:03:09 +0000 | [diff] [blame] | 1080 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 1081 |     In addition to supporting the methods and operations of mutable sequences, | 
 | 1082 |     :class:`UserList` instances provide the following attribute: | 
| Raymond Hettinger | 53dbe39 | 2008-02-12 20:03:09 +0000 | [diff] [blame] | 1083 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 1084 |     .. attribute:: data | 
| Raymond Hettinger | 53dbe39 | 2008-02-12 20:03:09 +0000 | [diff] [blame] | 1085 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 1086 |         A real :class:`list` object used to store the contents of the | 
 | 1087 |         :class:`UserList` class. | 
| Raymond Hettinger | 53dbe39 | 2008-02-12 20:03:09 +0000 | [diff] [blame] | 1088 |  | 
 | 1089 | **Subclassing requirements:** Subclasses of :class:`UserList` are expect to | 
 | 1090 | offer a constructor which can be called with either no arguments or one | 
 | 1091 | argument.  List operations which return a new sequence attempt to create an | 
 | 1092 | instance of the actual implementation class.  To do so, it assumes that the | 
 | 1093 | constructor can be called with a single parameter, which is a sequence object | 
 | 1094 | used as a data source. | 
 | 1095 |  | 
 | 1096 | If a derived class does not wish to comply with this requirement, all of the | 
 | 1097 | special methods supported by this class will need to be overridden; please | 
 | 1098 | consult the sources for information about the methods which need to be provided | 
 | 1099 | in that case. | 
| Raymond Hettinger | b3a65f8 | 2008-02-21 22:11:37 +0000 | [diff] [blame] | 1100 |  | 
 | 1101 | :class:`UserString` objects | 
| Christian Heimes | c3f30c4 | 2008-02-22 16:37:40 +0000 | [diff] [blame] | 1102 | --------------------------- | 
| Raymond Hettinger | b3a65f8 | 2008-02-21 22:11:37 +0000 | [diff] [blame] | 1103 |  | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 1104 | The class, :class:`UserString` acts as a wrapper around string objects. | 
 | 1105 | 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] | 1106 | subclass directly from :class:`str`; however, this class can be easier | 
 | 1107 | to work with because the underlying string is accessible as an | 
 | 1108 | attribute. | 
 | 1109 |  | 
 | 1110 | .. class:: UserString([sequence]) | 
 | 1111 |  | 
| Raymond Hettinger | 7929cfb | 2012-06-09 19:15:26 -0700 | [diff] [blame] | 1112 |     Class that simulates a string or a Unicode string object.  The instance's | 
 | 1113 |     content is kept in a regular string object, which is accessible via the | 
 | 1114 |     :attr:`data` attribute of :class:`UserString` instances.  The instance's | 
 | 1115 |     contents are initially set to a copy of *sequence*.  The *sequence* can | 
 | 1116 |     be an instance of :class:`bytes`, :class:`str`, :class:`UserString` (or a | 
 | 1117 |     subclass) or an arbitrary sequence which can be converted into a string using | 
 | 1118 |     the built-in :func:`str` function. |