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