~dkuhlman/python-training-materials/Materials

« back to all changes in this revision

Viewing changes to python-2.7.11-docs-html/_sources/library/collections.txt

  • Committer: Dave Kuhlman
  • Date: 2017-04-15 16:24:56 UTC
  • Revision ID: dkuhlman@davekuhlman.org-20170415162456-iav9vozzg4iwqwv3
Updated docs

Show diffs side-by-side

added added

removed removed

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