Changeset 391 for python/trunk/Doc/library/collections.rst
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Doc/library/collections.rst
r2 r391 1 2 1 :mod:`collections` --- High-performance container datatypes 3 2 =========================================================== … … 16 15 __name__ = '<doctest>' 17 16 18 This module implements high-performance container datatypes. Currently, 19 there are two datatypes, :class:`deque` and :class:`defaultdict`, and 20 one datatype factory function, :func:`namedtuple`. 21 22 .. versionchanged:: 2.5 23 Added :class:`defaultdict`. 24 25 .. versionchanged:: 2.6 26 Added :func:`namedtuple`. 27 28 The specialized containers provided in this module provide alternatives 29 to Python's general purpose built-in containers, :class:`dict`, 30 :class:`list`, :class:`set`, and :class:`tuple`. 31 32 Besides the containers provided here, the optional :mod:`bsddb` 33 module offers the ability to create in-memory or file based ordered 34 dictionaries with string keys using the :meth:`bsddb.btopen` method. 35 36 In addition to containers, the collections module provides some ABCs 37 (abstract base classes) that can be used to test whether a class 38 provides a particular interface, for example, is it hashable or 39 a mapping. 40 41 .. versionchanged:: 2.6 42 Added abstract base classes. 43 44 ABCs - abstract base classes 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 not specified, :func:`most_common` 108 returns *all* elements in the counter. Elements with equal counts are 109 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 45 438 ---------------------------- 46 439 47 The collections module offers the following ABCs: 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._asdict() 700 OrderedDict([('x', 11), ('y', 22)]) 701 702 .. versionchanged:: 2.7 703 Returns an :class:`OrderedDict` instead of a regular :class:`dict`. 704 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(): 715 inventory[partnum] = record._replace(price=newprices[partnum], timestamp=time.now()) 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 732 To retrieve a field whose name is stored in a string, use the :func:`getattr` 733 function: 734 735 >>> getattr(p, 'x') 736 11 737 738 To 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 745 Since a named tuple is a regular Python class, it is easy to add or change 746 functionality with a subclass. Here is how to add a calculated field and 747 a fixed-width print format: 748 749 >>> class Point(namedtuple('Point', 'x y')): 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) 756 757 >>> for p in Point(3, 4), Point(14, 5/7.): 758 print p 759 Point: x= 3.000 y= 4.000 hypot= 5.000 760 Point: x=14.000 y= 0.714 hypot=14.018 761 762 The subclass shown above sets ``__slots__`` to an empty tuple. This helps 763 keep memory requirements low by preventing the creation of instance dictionaries. 764 765 Subclassing is not useful for adding new, stored fields. Instead, simply 766 create a new named tuple type from the :attr:`_fields` attribute: 767 768 >>> Point3D = namedtuple('Point3D', Point._fields + ('z',)) 769 770 Default values can be implemented by using :meth:`_replace` to 771 customize 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 777 Enumerated constants can be implemented with named tuples, but it is simpler 778 and 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: 784 open, pending, closed = range(3) 785 786 .. seealso:: 787 788 `Named tuple recipe <http://code.activestate.com/recipes/500261/>`_ 789 adapted for Python 2.4. 790 791 792 :class:`OrderedDict` objects 793 ---------------------------- 794 795 Ordered dictionaries are just like regular dictionaries but they remember the 796 order that items were inserted. When iterating over an ordered dictionary, 797 the 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 815 In addition to the usual mapping methods, ordered dictionaries also support 816 reverse iteration using :func:`reversed`. 817 818 Equality tests between :class:`OrderedDict` objects are order-sensitive 819 and are implemented as ``list(od1.items())==list(od2.items())``. 820 Equality tests between :class:`OrderedDict` objects and other 821 :class:`Mapping` objects are order-insensitive like regular 822 dictionaries. This allows :class:`OrderedDict` objects to be substituted 823 anywhere a regular dictionary is used. 824 825 The :class:`OrderedDict` constructor and :meth:`update` method both accept 826 keyword arguments, but their order is lost because Python's function call 827 semantics 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 837 Since an ordered dictionary remembers its insertion order, it can be used 838 in 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 855 The new sorted dictionaries maintain their sort order when entries 856 are deleted. But when new keys are added, the keys are appended 857 to the end and the sort is not maintained. 858 859 It is also straight-forward to create an ordered dictionary variant 860 that remembers the order the keys were *last* inserted. 861 If a new entry overwrites an existing entry, the 862 original 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 872 An ordered dictionary can be combined with the :class:`Counter` class 873 so 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 887 Collections Abstract Base Classes 888 --------------------------------- 889 890 The collections module offers the following :term:`ABCs <abstract base class>`: 48 891 49 892 ========================= ===================== ====================== ==================================================== 50 ABC Inherits 893 ABC Inherits from Abstract Methods Mixin Methods 51 894 ========================= ===================== ====================== ==================================================== 52 895 :class:`Container` ``__contains__`` … … 57 900 :class:`Callable` ``__call__`` 58 901 59 :class:`Sequence` :class:`Sized`, ``__getitem__`` ``__contains__``. ``__iter__``, ``__reversed__``.60 :class:`Iterable`, 902 :class:`Sequence` :class:`Sized`, ``__getitem__``, ``__contains__``, ``__iter__``, ``__reversed__``, 903 :class:`Iterable`, ``__len__`` ``index``, and ``count`` 61 904 :class:`Container` 62 905 63 :class:`MutableSequence` :class:`Sequence` ``__setitem__`` Inherited Sequence methods and 64 ``__delitem__``, ``append``, ``reverse``, ``extend``, ``pop``, 65 and ``insert`` ``remove``, and ``__iadd__`` 66 67 :class:`Set` :class:`Sized`, ``__le__``, ``__lt__``, ``__eq__``, ``__ne__``, 68 :class:`Iterable`, ``__gt__``, ``__ge__``, ``__and__``, ``__or__`` 69 :class:`Container` ``__sub__``, ``__xor__``, and ``isdisjoint`` 70 71 :class:`MutableSet` :class:`Set` ``add`` and Inherited Set methods and 72 ``discard`` ``clear``, ``pop``, ``remove``, ``__ior__``, 73 ``__iand__``, ``__ixor__``, and ``__isub__`` 74 75 :class:`Mapping` :class:`Sized`, ``__getitem__`` ``__contains__``, ``keys``, ``items``, ``values``, 76 :class:`Iterable`, ``get``, ``__eq__``, and ``__ne__`` 77 :class:`Container` 78 79 :class:`MutableMapping` :class:`Mapping` ``__setitem__`` and Inherited Mapping methods and 80 ``__delitem__`` ``pop``, ``popitem``, ``clear``, ``update``, 81 and ``setdefault`` 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__`` 82 931 83 932 84 933 :class:`MappingView` :class:`Sized` ``__len__`` 934 :class:`ItemsView` :class:`MappingView`, ``__contains__``, 935 :class:`Set` ``__iter__`` 85 936 :class:`KeysView` :class:`MappingView`, ``__contains__``, 86 :class:`Set` ``__iter__``87 :class:`ItemsView` :class:`MappingView`, ``__contains__``,88 937 :class:`Set` ``__iter__`` 89 938 :class:`ValuesView` :class:`MappingView` ``__contains__``, ``__iter__`` 90 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 91 982 92 983 These ABCs allow us to ask classes or instances if they provide … … 132 1023 :meth:`_from_iterable` which calls ``cls(iterable)`` to produce a new set. 133 1024 If the :class:`Set` mixin is being used in a class with a different 134 constructor signature, you will need to override :meth:` from_iterable`1025 constructor signature, you will need to override :meth:`_from_iterable` 135 1026 with a classmethod that can construct new instances from 136 1027 an iterable argument. … … 154 1045 155 1046 * For more about ABCs, see the :mod:`abc` module and :pep:`3119`. 156 157 158 :class:`deque` objects159 ----------------------160 161 .. class:: deque([iterable[, maxlen]])162 163 Returns a new deque object initialized left-to-right (using :meth:`append`) with164 data from *iterable*. If *iterable* is not specified, the new deque is empty.165 166 Deques are a generalization of stacks and queues (the name is pronounced "deck"167 and is short for "double-ended queue"). Deques support thread-safe, memory168 efficient appends and pops from either side of the deque with approximately the169 same O(1) performance in either direction.170 171 Though :class:`list` objects support similar operations, they are optimized for172 fast fixed-length operations and incur O(n) memory movement costs for173 ``pop(0)`` and ``insert(0, v)`` operations which change both the size and174 position of the underlying data representation.175 176 .. versionadded:: 2.4177 178 If *maxlen* is not specified or is *None*, deques may grow to an179 arbitrary length. Otherwise, the deque is bounded to the specified maximum180 length. Once a bounded length deque is full, when new items are added, a181 corresponding number of items are discarded from the opposite end. Bounded182 length deques provide functionality similar to the ``tail`` filter in183 Unix. They are also useful for tracking transactions and other pools of data184 where only the most recent activity is of interest.185 186 .. versionchanged:: 2.6187 Added *maxlen* parameter.188 189 Deque objects support the following methods:190 191 192 .. method:: append(x)193 194 Add *x* to the right side of the deque.195 196 197 .. method:: appendleft(x)198 199 Add *x* to the left side of the deque.200 201 202 .. method:: clear()203 204 Remove all elements from the deque leaving it with length 0.205 206 207 .. method:: extend(iterable)208 209 Extend the right side of the deque by appending elements from the iterable210 argument.211 212 213 .. method:: extendleft(iterable)214 215 Extend the left side of the deque by appending elements from *iterable*.216 Note, the series of left appends results in reversing the order of217 elements in the iterable argument.218 219 220 .. method:: pop()221 222 Remove and return an element from the right side of the deque. If no223 elements are present, raises an :exc:`IndexError`.224 225 226 .. method:: popleft()227 228 Remove and return an element from the left side of the deque. If no229 elements are present, raises an :exc:`IndexError`.230 231 232 .. method:: remove(value)233 234 Removed the first occurrence of *value*. If not found, raises a235 :exc:`ValueError`.236 237 .. versionadded:: 2.5238 239 240 .. method:: rotate(n)241 242 Rotate the deque *n* steps to the right. If *n* is negative, rotate to243 the left. Rotating one step to the right is equivalent to:244 ``d.appendleft(d.pop())``.245 246 247 In addition to the above, deques support iteration, pickling, ``len(d)``,248 ``reversed(d)``, ``copy.copy(d)``, ``copy.deepcopy(d)``, membership testing with249 the :keyword:`in` operator, and subscript references such as ``d[-1]``. Indexed250 access is O(1) at both ends but slows to O(n) in the middle. For fast random251 access, use lists instead.252 253 Example:254 255 .. doctest::256 257 >>> from collections import deque258 >>> d = deque('ghi') # make a new deque with three items259 >>> for elem in d: # iterate over the deque's elements260 ... print elem.upper()261 G262 H263 I264 265 >>> d.append('j') # add a new entry to the right side266 >>> d.appendleft('f') # add a new entry to the left side267 >>> d # show the representation of the deque268 deque(['f', 'g', 'h', 'i', 'j'])269 270 >>> d.pop() # return and remove the rightmost item271 'j'272 >>> d.popleft() # return and remove the leftmost item273 'f'274 >>> list(d) # list the contents of the deque275 ['g', 'h', 'i']276 >>> d[0] # peek at leftmost item277 'g'278 >>> d[-1] # peek at rightmost item279 'i'280 281 >>> list(reversed(d)) # list the contents of a deque in reverse282 ['i', 'h', 'g']283 >>> 'h' in d # search the deque284 True285 >>> d.extend('jkl') # add multiple elements at once286 >>> d287 deque(['g', 'h', 'i', 'j', 'k', 'l'])288 >>> d.rotate(1) # right rotation289 >>> d290 deque(['l', 'g', 'h', 'i', 'j', 'k'])291 >>> d.rotate(-1) # left rotation292 >>> d293 deque(['g', 'h', 'i', 'j', 'k', 'l'])294 295 >>> deque(reversed(d)) # make a new deque in reverse order296 deque(['l', 'k', 'j', 'i', 'h', 'g'])297 >>> d.clear() # empty the deque298 >>> d.pop() # cannot pop from an empty deque299 Traceback (most recent call last):300 File "<pyshell#6>", line 1, in -toplevel-301 d.pop()302 IndexError: pop from an empty deque303 304 >>> d.extendleft('abc') # extendleft() reverses the input order305 >>> d306 deque(['c', 'b', 'a'])307 308 309 :class:`deque` Recipes310 ^^^^^^^^^^^^^^^^^^^^^^311 312 This section shows various approaches to working with deques.313 314 Bounded length deques provide functionality similar to the ``tail`` filter315 in Unix::316 317 def tail(filename, n=10):318 'Return the last n lines of a file'319 return deque(open(filename), n)320 321 Another approach to using deques is to maintain a sequence of recently322 added elements by appending to the right and popping to the left::323 324 def moving_average(iterable, n=3):325 # moving_average([40, 30, 50, 46, 39, 44]) --> 40.0 42.0 45.0 43.0326 # http://en.wikipedia.org/wiki/Moving_average327 it = iter(iterable)328 d = deque(itertools.islice(it, n-1))329 d.appendleft(0)330 s = sum(d)331 for elem in it:332 s += elem - d.popleft()333 d.append(elem)334 yield s / float(n)335 336 The :meth:`rotate` method provides a way to implement :class:`deque` slicing and337 deletion. For example, a pure Python implementation of ``del d[n]`` relies on338 the :meth:`rotate` method to position elements to be popped::339 340 def delete_nth(d, n):341 d.rotate(-n)342 d.popleft()343 d.rotate(n)344 345 To implement :class:`deque` slicing, use a similar approach applying346 :meth:`rotate` to bring a target element to the left side of the deque. Remove347 old entries with :meth:`popleft`, add new entries with :meth:`extend`, and then348 reverse the rotation.349 With minor variations on that approach, it is easy to implement Forth style350 stack manipulations such as ``dup``, ``drop``, ``swap``, ``over``, ``pick``,351 ``rot``, and ``roll``.352 353 354 :class:`defaultdict` objects355 ----------------------------356 357 .. class:: defaultdict([default_factory[, ...]])358 359 Returns a new dictionary-like object. :class:`defaultdict` is a subclass of the360 built-in :class:`dict` class. It overrides one method and adds one writable361 instance variable. The remaining functionality is the same as for the362 :class:`dict` class and is not documented here.363 364 The first argument provides the initial value for the :attr:`default_factory`365 attribute; it defaults to ``None``. All remaining arguments are treated the same366 as if they were passed to the :class:`dict` constructor, including keyword367 arguments.368 369 .. versionadded:: 2.5370 371 :class:`defaultdict` objects support the following method in addition to the372 standard :class:`dict` operations:373 374 375 .. method:: defaultdict.__missing__(key)376 377 If the :attr:`default_factory` attribute is ``None``, this raises a378 :exc:`KeyError` exception with the *key* as argument.379 380 If :attr:`default_factory` is not ``None``, it is called without arguments381 to provide a default value for the given *key*, this value is inserted in382 the dictionary for the *key*, and returned.383 384 If calling :attr:`default_factory` raises an exception this exception is385 propagated unchanged.386 387 This method is called by the :meth:`__getitem__` method of the388 :class:`dict` class when the requested key is not found; whatever it389 returns or raises is then returned or raised by :meth:`__getitem__`.390 391 392 :class:`defaultdict` objects support the following instance variable:393 394 395 .. attribute:: defaultdict.default_factory396 397 This attribute is used by the :meth:`__missing__` method; it is398 initialized from the first argument to the constructor, if present, or to399 ``None``, if absent.400 401 402 :class:`defaultdict` Examples403 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^404 405 Using :class:`list` as the :attr:`default_factory`, it is easy to group a406 sequence of key-value pairs into a dictionary of lists:407 408 >>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]409 >>> d = defaultdict(list)410 >>> for k, v in s:411 ... d[k].append(v)412 ...413 >>> d.items()414 [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]415 416 When each key is encountered for the first time, it is not already in the417 mapping; so an entry is automatically created using the :attr:`default_factory`418 function which returns an empty :class:`list`. The :meth:`list.append`419 operation then attaches the value to the new list. When keys are encountered420 again, the look-up proceeds normally (returning the list for that key) and the421 :meth:`list.append` operation adds another value to the list. This technique is422 simpler and faster than an equivalent technique using :meth:`dict.setdefault`:423 424 >>> d = {}425 >>> for k, v in s:426 ... d.setdefault(k, []).append(v)427 ...428 >>> d.items()429 [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]430 431 Setting the :attr:`default_factory` to :class:`int` makes the432 :class:`defaultdict` useful for counting (like a bag or multiset in other433 languages):434 435 >>> s = 'mississippi'436 >>> d = defaultdict(int)437 >>> for k in s:438 ... d[k] += 1439 ...440 >>> d.items()441 [('i', 4), ('p', 2), ('s', 4), ('m', 1)]442 443 When a letter is first encountered, it is missing from the mapping, so the444 :attr:`default_factory` function calls :func:`int` to supply a default count of445 zero. The increment operation then builds up the count for each letter.446 447 The function :func:`int` which always returns zero is just a special case of448 constant functions. A faster and more flexible way to create constant functions449 is to use :func:`itertools.repeat` which can supply any constant value (not just450 zero):451 452 >>> def constant_factory(value):453 ... return itertools.repeat(value).next454 >>> d = defaultdict(constant_factory('<missing>'))455 >>> d.update(name='John', action='ran')456 >>> '%(name)s %(action)s to %(object)s' % d457 'John ran to <missing>'458 459 Setting the :attr:`default_factory` to :class:`set` makes the460 :class:`defaultdict` useful for building a dictionary of sets:461 462 >>> s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]463 >>> d = defaultdict(set)464 >>> for k, v in s:465 ... d[k].add(v)466 ...467 >>> d.items()468 [('blue', set([2, 4])), ('red', set([1, 3]))]469 470 471 :func:`namedtuple` Factory Function for Tuples with Named Fields472 ----------------------------------------------------------------473 474 Named tuples assign meaning to each position in a tuple and allow for more readable,475 self-documenting code. They can be used wherever regular tuples are used, and476 they add the ability to access fields by name instead of position index.477 478 .. function:: namedtuple(typename, field_names, [verbose])479 480 Returns a new tuple subclass named *typename*. The new subclass is used to481 create tuple-like objects that have fields accessible by attribute lookup as482 well as being indexable and iterable. Instances of the subclass also have a483 helpful docstring (with typename and field_names) and a helpful :meth:`__repr__`484 method which lists the tuple contents in a ``name=value`` format.485 486 The *field_names* are a single string with each fieldname separated by whitespace487 and/or commas, for example ``'x y'`` or ``'x, y'``. Alternatively, *field_names*488 can be a sequence of strings such as ``['x', 'y']``.489 490 Any valid Python identifier may be used for a fieldname except for names491 starting with an underscore. Valid identifiers consist of letters, digits,492 and underscores but do not start with a digit or underscore and cannot be493 a :mod:`keyword` such as *class*, *for*, *return*, *global*, *pass*, *print*,494 or *raise*.495 496 If *verbose* is true, the class definition is printed just before being built.497 498 Named tuple instances do not have per-instance dictionaries, so they are499 lightweight and require no more memory than regular tuples.500 501 .. versionadded:: 2.6502 503 Example:504 505 .. doctest::506 :options: +NORMALIZE_WHITESPACE507 508 >>> Point = namedtuple('Point', 'x y')509 >>> p = Point(11, y=22) # instantiate with positional or keyword arguments510 >>> p[0] + p[1] # indexable like the plain tuple (11, 22)511 33512 >>> x, y = p # unpack like a regular tuple513 >>> x, y514 (11, 22)515 >>> p.x + p.y # fields also accessible by name516 33517 >>> p # readable __repr__ with a name=value style518 Point(x=11, y=22)519 520 >>> Point = namedtuple('Point', 'x y', verbose=True) # show the class definition521 class Point(tuple):522 'Point(x, y)'523 <BLANKLINE>524 __slots__ = ()525 <BLANKLINE>526 _fields = ('x', 'y')527 <BLANKLINE>528 def __new__(_cls, x, y):529 return _tuple.__new__(_cls, (x, y))530 <BLANKLINE>531 @classmethod532 def _make(cls, iterable, new=tuple.__new__, len=len):533 'Make a new Point object from a sequence or iterable'534 result = new(cls, iterable)535 if len(result) != 2:536 raise TypeError('Expected 2 arguments, got %d' % len(result))537 return result538 <BLANKLINE>539 def __repr__(self):540 return 'Point(x=%r, y=%r)' % self541 <BLANKLINE>542 def _asdict(t):543 'Return a new dict which maps field names to their values'544 return {'x': t[0], 'y': t[1]}545 <BLANKLINE>546 def _replace(_self, **kwds):547 'Return a new Point object replacing specified fields with new values'548 result = _self._make(map(kwds.pop, ('x', 'y'), _self))549 if kwds:550 raise ValueError('Got unexpected field names: %r' % kwds.keys())551 return result552 <BLANKLINE>553 def __getnewargs__(self):554 return tuple(self)555 <BLANKLINE>556 x = _property(_itemgetter(0))557 y = _property(_itemgetter(1))558 559 Named tuples are especially useful for assigning field names to result tuples returned560 by the :mod:`csv` or :mod:`sqlite3` modules::561 562 EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')563 564 import csv565 for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))):566 print emp.name, emp.title567 568 import sqlite3569 conn = sqlite3.connect('/companydata')570 cursor = conn.cursor()571 cursor.execute('SELECT name, age, title, department, paygrade FROM employees')572 for emp in map(EmployeeRecord._make, cursor.fetchall()):573 print emp.name, emp.title574 575 In addition to the methods inherited from tuples, named tuples support576 three additional methods and one attribute. To prevent conflicts with577 field names, the method and attribute names start with an underscore.578 579 .. method:: somenamedtuple._make(iterable)580 581 Class method that makes a new instance from an existing sequence or iterable.582 583 .. doctest::584 585 >>> t = [11, 22]586 >>> Point._make(t)587 Point(x=11, y=22)588 589 .. method:: somenamedtuple._asdict()590 591 Return a new dict which maps field names to their corresponding values::592 593 >>> p._asdict()594 {'x': 11, 'y': 22}595 596 .. method:: somenamedtuple._replace(kwargs)597 598 Return a new instance of the named tuple replacing specified fields with new599 values::600 601 >>> p = Point(x=11, y=22)602 >>> p._replace(x=33)603 Point(x=33, y=22)604 605 >>> for partnum, record in inventory.items():606 ... inventory[partnum] = record._replace(price=newprices[partnum], timestamp=time.now())607 608 .. attribute:: somenamedtuple._fields609 610 Tuple of strings listing the field names. Useful for introspection611 and for creating new named tuple types from existing named tuples.612 613 .. doctest::614 615 >>> p._fields # view the field names616 ('x', 'y')617 618 >>> Color = namedtuple('Color', 'red green blue')619 >>> Pixel = namedtuple('Pixel', Point._fields + Color._fields)620 >>> Pixel(11, 22, 128, 255, 0)621 Pixel(x=11, y=22, red=128, green=255, blue=0)622 623 To retrieve a field whose name is stored in a string, use the :func:`getattr`624 function:625 626 >>> getattr(p, 'x')627 11628 629 To convert a dictionary to a named tuple, use the double-star-operator630 (as described in :ref:`tut-unpacking-arguments`):631 632 >>> d = {'x': 11, 'y': 22}633 >>> Point(**d)634 Point(x=11, y=22)635 636 Since a named tuple is a regular Python class, it is easy to add or change637 functionality with a subclass. Here is how to add a calculated field and638 a fixed-width print format:639 640 >>> class Point(namedtuple('Point', 'x y')):641 ... __slots__ = ()642 ... @property643 ... def hypot(self):644 ... return (self.x ** 2 + self.y ** 2) ** 0.5645 ... def __str__(self):646 ... return 'Point: x=%6.3f y=%6.3f hypot=%6.3f' % (self.x, self.y, self.hypot)647 648 >>> for p in Point(3, 4), Point(14, 5/7.):649 ... print p650 Point: x= 3.000 y= 4.000 hypot= 5.000651 Point: x=14.000 y= 0.714 hypot=14.018652 653 The subclass shown above sets ``__slots__`` to an empty tuple. This keeps654 keep memory requirements low by preventing the creation of instance dictionaries.655 656 Subclassing is not useful for adding new, stored fields. Instead, simply657 create a new named tuple type from the :attr:`_fields` attribute:658 659 >>> Point3D = namedtuple('Point3D', Point._fields + ('z',))660 661 Default values can be implemented by using :meth:`_replace` to662 customize a prototype instance:663 664 >>> Account = namedtuple('Account', 'owner balance transaction_count')665 >>> default_account = Account('<owner name>', 0.0, 0)666 >>> johns_account = default_account._replace(owner='John')667 668 Enumerated constants can be implemented with named tuples, but it is simpler669 and more efficient to use a simple class declaration:670 671 >>> Status = namedtuple('Status', 'open pending closed')._make(range(3))672 >>> Status.open, Status.pending, Status.closed673 (0, 1, 2)674 >>> class Status:675 ... open, pending, closed = range(3)676 677 .. seealso::678 679 `Named tuple recipe <http://code.activestate.com/recipes/500261/>`_680 adapted for Python 2.4.
Note:
See TracChangeset
for help on using the changeset viewer.