Expand a bit on dict views.

This commit is contained in:
Georg Brandl 2009-06-16 19:22:10 +00:00
parent 5e06a65639
commit fc11f27f61
1 changed files with 18 additions and 11 deletions

View File

@ -154,6 +154,8 @@ the queue, use :meth:`pop` with ``0`` as the index. For example::
['Michael', 'Terry', 'Graham'] ['Michael', 'Terry', 'Graham']
.. _tut-listcomps:
List Comprehensions List Comprehensions
------------------- -------------------
@ -401,7 +403,7 @@ Here is a brief demonstration::
>>> a ^ b # letters in a or b but not both >>> a ^ b # letters in a or b but not both
{'r', 'd', 'b', 'm', 'z', 'l'} {'r', 'd', 'b', 'm', 'z', 'l'}
Like for lists, there is a set comprehension syntax:: Like :ref:`for lists <tut-listcomps>`, there is a set comprehension syntax::
>>> a = {x for x in 'abracadabra' if x not in 'abc'} >>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a >>> a
@ -438,9 +440,9 @@ value associated with that key is forgotten. It is an error to extract a value
using a non-existent key. using a non-existent key.
Performing ``list(d.keys())`` on a dictionary returns a list of all the keys Performing ``list(d.keys())`` on a dictionary returns a list of all the keys
used in the dictionary, in arbitrary order (if you want it sorted, just apply used in the dictionary, in arbitrary order (if you want it sorted, just use
the :meth:`sorted` function instead). To check whether a single key is ``sorted(d.keys())`` instead). [1]_ To check whether a single key is in the
in the dictionary, use the :keyword:`in` keyword. dictionary, use the :keyword:`in` keyword.
Here is a small example using a dictionary:: Here is a small example using a dictionary::
@ -463,9 +465,8 @@ Here is a small example using a dictionary::
>>> 'jack' not in tel >>> 'jack' not in tel
False False
The :func:`dict` constructor builds dictionaries directly from lists of The :func:`dict` constructor builds dictionaries directly from sequences of
key-value pairs stored as tuples. When the pairs form a pattern, list key-value pairs stored as tuples. ::
comprehensions can compactly specify the key-value list. ::
>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]) >>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'jack': 4098, 'guido': 4127} {'sape': 4139, 'jack': 4098, 'guido': 4127}
@ -483,7 +484,6 @@ keyword arguments::
{'sape': 4139, 'jack': 4098, 'guido': 4127} {'sape': 4139, 'jack': 4098, 'guido': 4127}
.. XXX Find out the right way to do these DUBOIS
.. _tut-loopidioms: .. _tut-loopidioms:
Looping Techniques Looping Techniques
@ -604,9 +604,9 @@ sequence is exhausted. If two items to be compared are themselves sequences of
the same type, the lexicographical comparison is carried out recursively. If the same type, the lexicographical comparison is carried out recursively. If
all items of two sequences compare equal, the sequences are considered equal. all items of two sequences compare equal, the sequences are considered equal.
If one sequence is an initial sub-sequence of the other, the shorter sequence is If one sequence is an initial sub-sequence of the other, the shorter sequence is
the smaller (lesser) one. Lexicographical ordering for strings uses the ASCII the smaller (lesser) one. Lexicographical ordering for strings uses the Unicode
ordering for individual characters. Some examples of comparisons between codepoint number to order individual characters. Some examples of comparisons
sequences of the same type:: between sequences of the same type::
(1, 2, 3) < (1, 2, 4) (1, 2, 3) < (1, 2, 4)
[1, 2, 3] < [1, 2, 4] [1, 2, 3] < [1, 2, 4]
@ -621,3 +621,10 @@ provided that the objects have appropriate comparison methods. For example,
mixed numeric types are compared according to their numeric value, so 0 equals mixed numeric types are compared according to their numeric value, so 0 equals
0.0, etc. Otherwise, rather than providing an arbitrary ordering, the 0.0, etc. Otherwise, rather than providing an arbitrary ordering, the
interpreter will raise a :exc:`TypeError` exception. interpreter will raise a :exc:`TypeError` exception.
.. rubric:: Footnotes
.. [1] Calling ``d.keys()`` will return a :dfn:`dictionary view` object. It
supports operations like membership test and iteration, but its contents
are not independent of the original dictionary -- it is only a *view*.