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