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