source: python/trunk/Doc/library/collections.rst

Last change on this file was 391, checked in by dmik, 11 years ago

python: Merge vendor 2.7.6 to trunk.

  • Property svn:eol-style set to native
File size: 40.2 KB
RevLine 
[2]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
[391]17**Source code:** :source:`Lib/collections.py` and :source:`Lib/_abcoll.py`
[2]18
[391]19--------------
[2]20
[391]21This module implements specialized container datatypes providing alternatives to
22Python's general purpose built-in containers, :class:`dict`, :class:`list`,
23:class:`set`, and :class:`tuple`.
[2]24
[391]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===================== ==================================================================== ===========================
[2]32
[391]33In addition to the concrete container classes, the collections module provides
34:ref:`abstract base classes <collections-abstract-base-classes>` that can be
35used to test whether a class provides a particular interface, for example,
36whether it is hashable or a mapping.
[2]37
38
[391]39:class:`Counter` objects
40------------------------
[2]41
[391]42A counter tool is provided to support convenient and rapid tallies.
43For example::
[2]44
[391]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})
[2]51
[391]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)]
[2]58
[391]59.. class:: Counter([iterable-or-mapping])
[2]60
[391]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.
[2]66
[391]67 Elements are counted from an *iterable* or initialized from another
68 *mapping* (or counter):
[2]69
[391]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
[2]74
[391]75 Counter objects have a dictionary interface except that they return a zero
76 count for missing items instead of raising a :exc:`KeyError`:
[2]77
[391]78 >>> c = Counter(['eggs', 'ham'])
79 >>> c['bacon'] # count of a missing element is zero
80 0
[2]81
[391]82 Setting a count to zero does not remove an element from a counter.
83 Use ``del`` to remove it entirely:
[2]84
[391]85 >>> c['sausage'] = 0 # counter entry with a zero count
86 >>> del c['sausage'] # del actually removes the entry
[2]87
[391]88 .. versionadded:: 2.7
[2]89
90
[391]91 Counter objects support three methods beyond those available for all
92 dictionaries:
[2]93
[391]94 .. method:: elements()
[2]95
[391]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.
[2]99
[391]100 >>> c = Counter(a=4, b=2, c=0, d=-2)
101 >>> list(c.elements())
102 ['a', 'a', 'a', 'a', 'b', 'b']
[2]103
[391]104 .. method:: most_common([n])
[2]105
[391]106 Return a list of the *n* most common elements and their counts from the
107 most common to the least. If *n* is not specified, :func:`most_common`
108 returns *all* elements in the counter. Elements with equal counts are
109 ordered arbitrarily:
[2]110
[391]111 >>> Counter('abracadabra').most_common(3)
112 [('a', 5), ('r', 2), ('b', 2)]
[2]113
[391]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
140Common 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
152Several mathematical operations are provided for combining :class:`Counter`
153objects to produce multisets (counters that have counts greater than zero).
154Addition and subtraction combine counters by adding or subtracting the counts
155of corresponding elements. Intersection and union return the minimum and
156maximum of corresponding counts. Each operation can accept inputs with signed
157counts, 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
[2]197.. seealso::
198
[391]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.
[2]202
[391]203 * `Bag class <http://www.gnu.org/software/smalltalk/manual-base/html_node/Bag.html>`_
204 in Smalltalk.
[2]205
[391]206 * Wikipedia entry for `Multisets <http://en.wikipedia.org/wiki/Multiset>`_.
[2]207
[391]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
[2]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
[391]270 .. method:: count(x)
271
272 Count the number of deque elements equal to *x*.
273
274 .. versionadded:: 2.7
275
[2]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
[391]308 .. method:: reverse()
[2]309
[391]310 Reverse the elements of the deque in-place and then return ``None``.
311
312 .. versionadded:: 2.7
313
[2]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
[391]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
[2]330In addition to the above, deques support iteration, pickling, ``len(d)``,
331``reversed(d)``, ``copy.copy(d)``, ``copy.deepcopy(d)``, membership testing with
332the :keyword:`in` operator, and subscript references such as ``d[-1]``. Indexed
333access is O(1) at both ends but slows to O(n) in the middle. For fast random
334access, use lists instead.
335
336Example:
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
395This section shows various approaches to working with deques.
396
397Bounded length deques provide functionality similar to the ``tail`` filter
398in Unix::
399
400 def tail(filename, n=10):
401 'Return the last n lines of a file'
402 return deque(open(filename), n)
403
404Another approach to using deques is to maintain a sequence of recently
405added 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
419The :meth:`rotate` method provides a way to implement :class:`deque` slicing and
420deletion. For example, a pure Python implementation of ``del d[n]`` relies on
421the :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
428To 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
430old entries with :meth:`popleft`, add new entries with :meth:`extend`, and then
431reverse the rotation.
432With minor variations on that approach, it is easy to implement Forth style
433stack 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
[391]457 .. method:: __missing__(key)
[2]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
[391]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`.
[2]477
[391]478
[2]479 :class:`defaultdict` objects support the following instance variable:
480
481
[391]482 .. attribute:: default_factory
[2]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
492Using :class:`list` as the :attr:`default_factory`, it is easy to group a
493sequence 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
503When each key is encountered for the first time, it is not already in the
504mapping; so an entry is automatically created using the :attr:`default_factory`
505function which returns an empty :class:`list`. The :meth:`list.append`
506operation then attaches the value to the new list. When keys are encountered
507again, 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
509simpler 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
518Setting the :attr:`default_factory` to :class:`int` makes the
519:class:`defaultdict` useful for counting (like a bag or multiset in other
520languages):
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
530When 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
532zero. The increment operation then builds up the count for each letter.
533
534The function :func:`int` which always returns zero is just a special case of
535constant functions. A faster and more flexible way to create constant functions
536is to use :func:`itertools.repeat` which can supply any constant value (not just
537zero):
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
546Setting 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
561Named tuples assign meaning to each position in a tuple and allow for more readable,
562self-documenting code. They can be used wherever regular tuples are used, and
563they add the ability to access fields by name instead of position index.
564
[391]565.. function:: namedtuple(typename, field_names, [verbose=False], [rename=False])
[2]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
[391]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'``.
[2]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
[391]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
[2]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
[391]595 .. versionchanged:: 2.7
596 added support for *rename*.
597
[2]598Example:
599
600.. doctest::
601 :options: +NORMALIZE_WHITESPACE
602
[391]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
[2]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
664Named tuples are especially useful for assigning field names to result tuples returned
665by 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
680In addition to the methods inherited from tuples, named tuples support
681three additional methods and one attribute. To prevent conflicts with
682field names, the method and attribute names start with an underscore.
683
[391]684.. classmethod:: somenamedtuple._make(iterable)
[2]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
[391]696 Return a new :class:`OrderedDict` which maps field names to their corresponding
697 values::
[2]698
699 >>> p._asdict()
[391]700 OrderedDict([('x', 11), ('y', 22)])
[2]701
[391]702 .. versionchanged:: 2.7
703 Returns an :class:`OrderedDict` instead of a regular :class:`dict`.
704
[2]705.. method:: somenamedtuple._replace(kwargs)
706
707 Return a new instance of the named tuple replacing specified fields with new
708 values::
709
710 >>> p = Point(x=11, y=22)
711 >>> p._replace(x=33)
712 Point(x=33, y=22)
713
714 >>> for partnum, record in inventory.items():
[391]715 inventory[partnum] = record._replace(price=newprices[partnum], timestamp=time.now())
[2]716
717.. attribute:: somenamedtuple._fields
718
719 Tuple of strings listing the field names. Useful for introspection
720 and for creating new named tuple types from existing named tuples.
721
722 .. doctest::
723
724 >>> p._fields # view the field names
725 ('x', 'y')
726
727 >>> Color = namedtuple('Color', 'red green blue')
728 >>> Pixel = namedtuple('Pixel', Point._fields + Color._fields)
729 >>> Pixel(11, 22, 128, 255, 0)
730 Pixel(x=11, y=22, red=128, green=255, blue=0)
731
732To retrieve a field whose name is stored in a string, use the :func:`getattr`
733function:
734
735 >>> getattr(p, 'x')
736 11
737
738To convert a dictionary to a named tuple, use the double-star-operator
739(as described in :ref:`tut-unpacking-arguments`):
740
741 >>> d = {'x': 11, 'y': 22}
742 >>> Point(**d)
743 Point(x=11, y=22)
744
745Since a named tuple is a regular Python class, it is easy to add or change
746functionality with a subclass. Here is how to add a calculated field and
747a fixed-width print format:
748
749 >>> class Point(namedtuple('Point', 'x y')):
[391]750 __slots__ = ()
751 @property
752 def hypot(self):
753 return (self.x ** 2 + self.y ** 2) ** 0.5
754 def __str__(self):
755 return 'Point: x=%6.3f y=%6.3f hypot=%6.3f' % (self.x, self.y, self.hypot)
[2]756
757 >>> for p in Point(3, 4), Point(14, 5/7.):
[391]758 print p
[2]759 Point: x= 3.000 y= 4.000 hypot= 5.000
760 Point: x=14.000 y= 0.714 hypot=14.018
761
[391]762The subclass shown above sets ``__slots__`` to an empty tuple. This helps
[2]763keep memory requirements low by preventing the creation of instance dictionaries.
764
765Subclassing is not useful for adding new, stored fields. Instead, simply
766create a new named tuple type from the :attr:`_fields` attribute:
767
768 >>> Point3D = namedtuple('Point3D', Point._fields + ('z',))
769
770Default values can be implemented by using :meth:`_replace` to
771customize a prototype instance:
772
773 >>> Account = namedtuple('Account', 'owner balance transaction_count')
774 >>> default_account = Account('<owner name>', 0.0, 0)
775 >>> johns_account = default_account._replace(owner='John')
776
777Enumerated constants can be implemented with named tuples, but it is simpler
778and more efficient to use a simple class declaration:
779
780 >>> Status = namedtuple('Status', 'open pending closed')._make(range(3))
781 >>> Status.open, Status.pending, Status.closed
782 (0, 1, 2)
783 >>> class Status:
[391]784 open, pending, closed = range(3)
[2]785
786.. seealso::
787
788 `Named tuple recipe <http://code.activestate.com/recipes/500261/>`_
789 adapted for Python 2.4.
[391]790
791
792:class:`OrderedDict` objects
793----------------------------
794
795Ordered dictionaries are just like regular dictionaries but they remember the
796order that items were inserted. When iterating over an ordered dictionary,
797the items are returned in the order their keys were first added.
798
799.. class:: OrderedDict([items])
800
801 Return an instance of a dict subclass, supporting the usual :class:`dict`
802 methods. An *OrderedDict* is a dict that remembers the order that keys
803 were first inserted. If a new entry overwrites an existing entry, the
804 original insertion position is left unchanged. Deleting an entry and
805 reinserting it will move it to the end.
806
807 .. versionadded:: 2.7
808
809.. method:: OrderedDict.popitem(last=True)
810
811 The :meth:`popitem` method for ordered dictionaries returns and removes
812 a (key, value) pair. The pairs are returned in LIFO order if *last* is
813 true or FIFO order if false.
814
815In addition to the usual mapping methods, ordered dictionaries also support
816reverse iteration using :func:`reversed`.
817
818Equality tests between :class:`OrderedDict` objects are order-sensitive
819and are implemented as ``list(od1.items())==list(od2.items())``.
820Equality tests between :class:`OrderedDict` objects and other
821:class:`Mapping` objects are order-insensitive like regular
822dictionaries. This allows :class:`OrderedDict` objects to be substituted
823anywhere a regular dictionary is used.
824
825The :class:`OrderedDict` constructor and :meth:`update` method both accept
826keyword arguments, but their order is lost because Python's function call
827semantics pass-in keyword arguments using a regular unordered dictionary.
828
829.. seealso::
830
831 `Equivalent OrderedDict recipe <http://code.activestate.com/recipes/576693/>`_
832 that runs on Python 2.4 or later.
833
834:class:`OrderedDict` Examples and Recipes
835^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
836
837Since an ordered dictionary remembers its insertion order, it can be used
838in conjuction with sorting to make a sorted dictionary::
839
840 >>> # regular unsorted dictionary
841 >>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
842
843 >>> # dictionary sorted by key
844 >>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
845 OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
846
847 >>> # dictionary sorted by value
848 >>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
849 OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
850
851 >>> # dictionary sorted by length of the key string
852 >>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
853 OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])
854
855The new sorted dictionaries maintain their sort order when entries
856are deleted. But when new keys are added, the keys are appended
857to the end and the sort is not maintained.
858
859It is also straight-forward to create an ordered dictionary variant
860that remembers the order the keys were *last* inserted.
861If a new entry overwrites an existing entry, the
862original insertion position is changed and moved to the end::
863
864 class LastUpdatedOrderedDict(OrderedDict):
865 'Store items in the order the keys were last added'
866
867 def __setitem__(self, key, value):
868 if key in self:
869 del self[key]
870 OrderedDict.__setitem__(self, key, value)
871
872An ordered dictionary can be combined with the :class:`Counter` class
873so that the counter remembers the order elements are first encountered::
874
875 class OrderedCounter(Counter, OrderedDict):
876 'Counter that remembers the order elements are first encountered'
877
878 def __repr__(self):
879 return '%s(%r)' % (self.__class__.__name__, OrderedDict(self))
880
881 def __reduce__(self):
882 return self.__class__, (OrderedDict(self),)
883
884
885.. _collections-abstract-base-classes:
886
887Collections Abstract Base Classes
888---------------------------------
889
890The collections module offers the following :term:`ABCs <abstract base class>`:
891
892========================= ===================== ====================== ====================================================
893ABC Inherits from Abstract Methods Mixin Methods
894========================= ===================== ====================== ====================================================
895:class:`Container` ``__contains__``
896:class:`Hashable` ``__hash__``
897:class:`Iterable` ``__iter__``
898:class:`Iterator` :class:`Iterable` ``next`` ``__iter__``
899:class:`Sized` ``__len__``
900:class:`Callable` ``__call__``
901
902:class:`Sequence` :class:`Sized`, ``__getitem__``, ``__contains__``, ``__iter__``, ``__reversed__``,
903 :class:`Iterable`, ``__len__`` ``index``, and ``count``
904 :class:`Container`
905
906:class:`MutableSequence` :class:`Sequence` ``__getitem__``, Inherited :class:`Sequence` methods and
907 ``__setitem__``, ``append``, ``reverse``, ``extend``, ``pop``,
908 ``__delitem__``, ``remove``, and ``__iadd__``
909 ``__len__``,
910 ``insert``
911
912:class:`Set` :class:`Sized`, ``__contains__``, ``__le__``, ``__lt__``, ``__eq__``, ``__ne__``,
913 :class:`Iterable`, ``__iter__``, ``__gt__``, ``__ge__``, ``__and__``, ``__or__``,
914 :class:`Container` ``__len__`` ``__sub__``, ``__xor__``, and ``isdisjoint``
915
916:class:`MutableSet` :class:`Set` ``__contains__``, Inherited :class:`Set` methods and
917 ``__iter__``, ``clear``, ``pop``, ``remove``, ``__ior__``,
918 ``__len__``, ``__iand__``, ``__ixor__``, and ``__isub__``
919 ``add``,
920 ``discard``
921
922:class:`Mapping` :class:`Sized`, ``__getitem__``, ``__contains__``, ``keys``, ``items``, ``values``,
923 :class:`Iterable`, ``__iter__``, ``get``, ``__eq__``, and ``__ne__``
924 :class:`Container` ``__len__``
925
926:class:`MutableMapping` :class:`Mapping` ``__getitem__``, Inherited :class:`Mapping` methods and
927 ``__setitem__``, ``pop``, ``popitem``, ``clear``, ``update``,
928 ``__delitem__``, and ``setdefault``
929 ``__iter__``,
930 ``__len__``
931
932
933:class:`MappingView` :class:`Sized` ``__len__``
934:class:`ItemsView` :class:`MappingView`, ``__contains__``,
935 :class:`Set` ``__iter__``
936:class:`KeysView` :class:`MappingView`, ``__contains__``,
937 :class:`Set` ``__iter__``
938:class:`ValuesView` :class:`MappingView` ``__contains__``, ``__iter__``
939========================= ===================== ====================== ====================================================
940
941
942.. class:: Container
943 Hashable
944 Sized
945 Callable
946
947 ABCs for classes that provide respectively the methods :meth:`__contains__`,
948 :meth:`__hash__`, :meth:`__len__`, and :meth:`__call__`.
949
950.. class:: Iterable
951
952 ABC for classes that provide the :meth:`__iter__` method.
953 See also the definition of :term:`iterable`.
954
955.. class:: Iterator
956
957 ABC for classes that provide the :meth:`__iter__` and :meth:`next` methods.
958 See also the definition of :term:`iterator`.
959
960.. class:: Sequence
961 MutableSequence
962
963 ABCs for read-only and mutable :term:`sequences <sequence>`.
964
965.. class:: Set
966 MutableSet
967
968 ABCs for read-only and mutable sets.
969
970.. class:: Mapping
971 MutableMapping
972
973 ABCs for read-only and mutable :term:`mappings <mapping>`.
974
975.. class:: MappingView
976 ItemsView
977 KeysView
978 ValuesView
979
980 ABCs for mapping, items, keys, and values :term:`views <view>`.
981
982
983These ABCs allow us to ask classes or instances if they provide
984particular functionality, for example::
985
986 size = None
987 if isinstance(myvar, collections.Sized):
988 size = len(myvar)
989
990Several of the ABCs are also useful as mixins that make it easier to develop
991classes supporting container APIs. For example, to write a class supporting
992the full :class:`Set` API, it only necessary to supply the three underlying
993abstract methods: :meth:`__contains__`, :meth:`__iter__`, and :meth:`__len__`.
994The ABC supplies the remaining methods such as :meth:`__and__` and
995:meth:`isdisjoint` ::
996
997 class ListBasedSet(collections.Set):
998 ''' Alternate set implementation favoring space over speed
999 and not requiring the set elements to be hashable. '''
1000 def __init__(self, iterable):
1001 self.elements = lst = []
1002 for value in iterable:
1003 if value not in lst:
1004 lst.append(value)
1005 def __iter__(self):
1006 return iter(self.elements)
1007 def __contains__(self, value):
1008 return value in self.elements
1009 def __len__(self):
1010 return len(self.elements)
1011
1012 s1 = ListBasedSet('abcdef')
1013 s2 = ListBasedSet('defghi')
1014 overlap = s1 & s2 # The __and__() method is supported automatically
1015
1016Notes on using :class:`Set` and :class:`MutableSet` as a mixin:
1017
1018(1)
1019 Since some set operations create new sets, the default mixin methods need
1020 a way to create new instances from an iterable. The class constructor is
1021 assumed to have a signature in the form ``ClassName(iterable)``.
1022 That assumption is factored-out to an internal classmethod called
1023 :meth:`_from_iterable` which calls ``cls(iterable)`` to produce a new set.
1024 If the :class:`Set` mixin is being used in a class with a different
1025 constructor signature, you will need to override :meth:`_from_iterable`
1026 with a classmethod that can construct new instances from
1027 an iterable argument.
1028
1029(2)
1030 To override the comparisons (presumably for speed, as the
1031 semantics are fixed), redefine :meth:`__le__` and
1032 then the other operations will automatically follow suit.
1033
1034(3)
1035 The :class:`Set` mixin provides a :meth:`_hash` method to compute a hash value
1036 for the set; however, :meth:`__hash__` is not defined because not all sets
1037 are hashable or immutable. To add set hashabilty using mixins,
1038 inherit from both :meth:`Set` and :meth:`Hashable`, then define
1039 ``__hash__ = Set._hash``.
1040
1041.. seealso::
1042
1043 * `OrderedSet recipe <http://code.activestate.com/recipes/576694/>`_ for an
1044 example built on :class:`MutableSet`.
1045
1046 * For more about ABCs, see the :mod:`abc` module and :pep:`3119`.
Note: See TracBrowser for help on using the repository browser.