Home  >  Article  >  Backend Development  >  Detailed explanation of the usage of items() series functions in Python

Detailed explanation of the usage of items() series functions in Python

Y2J
Y2JOriginal
2017-05-17 15:11:3714308browse

This article mainly introduces the usage of the dictionary items() series of functions in Python. It is a very practical function. Friends who need it can refer to it.

The example of this article describes the usage of the dictionary items() series of functions in Python. Usage, has a good reference value for Python programming. The specific analysis is as follows:

Let’s look at an example first:

import html  # available only in Python 3.x 
def make_elements(name, value, **attrs): 
  keyvals = [' %s="%s"' % item for item in attrs.items()] 
  attr_str = ''.join(keyvals) 
  element = &#39;<{name}{attrs}>{value}</{name}>&#39;.format( 
      name = name, 
      attrs = attr_str, 
      value = html.escape(value)) 
  return element 
make_elements(&#39;item&#39;, &#39;Albatross&#39;, size=&#39;large&#39;, quantity=6) 
make_elements(&#39;p&#39;, &#39;<spam>&#39;)

The function of this program is very simple, it is to generate HTML tags. Note that the html module can only be used in Python 3 .x only exists.

At first I just noticed that the dictionary type variables of the keyvals that generate the tag attributeslist are very interesting. Two %s correspond to one item, so just After checking the relevant information, I found out a lot of things, which I will summarize here.

Note: For the versions used by all Python interpreters below, 2.x corresponds to 2.7.3, and 3.x corresponds to 3.4.1
In Python 2.x, items in the official documentation The method is explained as follows: generate a list of (key, value) pairs, like the following:

>>> d = {&#39;size&#39;: &#39;large&#39;, &#39;quantity&#39;: 6} 
>>> d.items() 
[(&#39;quantity&#39;, 6), (&#39;size&#39;, &#39;large&#39;)]

In the process of searching, I accidentally saw such a question on stackoverflow: What is the difference between dict.items() and dict.iteritems()? , the first answer roughly means this:

"At first, items() returned a list containing all the elements of dict like the above, but because this was too wasteful of memory, I later added ( Note: The group of functions iteritems(), iterkeys(), and itervalues() that began to appear in Python 2.2 are used to return an iterator to save memory, but in 3.x items() itself returns such an iterator. Therefore, the behavior of items() in 3.x is consistent with the behavior of iteritems() in 2.x, and the iteritems() function is abolished.”

But it’s more interesting. Yes, although this answer was accepted, the comments below pointed out that this statement is not accurate. The behavior of items() in 3.x is different from iteritems() in 2.x. It actually returns a " full sequence-protocol object", this object can reflect changes in dict. Later, another function viewitems() was added to Python 2.7 and this behavior in 3.x To be consistent
To confirm the claims in the comments, I did the following test, paying attention to the Python version used in the test:

Test 1 (Python 2.7.3):

Python 2.7.3 (default, Feb 27 2014, 19:58:35)  
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> d = {&#39;size&#39;: &#39;large&#39;, &#39;quantity&#39;: 6} 
>>> il = d.items() 
>>> it = d.iteritems() 
>>> vi = d.viewitems() 
>>> il 
[(&#39;quantity&#39;, 6), (&#39;size&#39;, &#39;large&#39;)] 
>>> it 
<dictionary-itemiterator object at 0x7fe555159f18> 
>>> vi 
dict_items([(&#39;quantity&#39;, 6), (&#39;size&#39;, &#39;large&#39;)])

Test 2 (Python 3.4.1):

Python 3.4.1 (default, Aug 12 2014, 16:43:01)  
[GCC 4.9.0] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> d = {&#39;size&#39;: &#39;large&#39;, &#39;quantity&#39;: 6} 
>>> il = d.items() 
>>> it = d.iteritems() 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
AttributeError: &#39;dict&#39; object has no attribute &#39;iteritems&#39; 
>>> vi = d.viewitems() 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
AttributeError: &#39;dict&#39; object has no attribute &#39;viewitems&#39; 
>>> il 
dict_items([(&#39;size&#39;, &#39;large&#39;), (&#39;quantity&#39;, 6)])

You can see that in Python 3.x, the two methods iteritems() and viewitems() have been abolished, and the result of item() is Consistent with viewitems() in 2.x.
2.x The content returned by iteritems() and viewitems() can be traversed using for. As shown below

>>> for k, v in it: 
...  print k, v 
...  
quantity 6 
size large 
>>> for k, v in vi: 
...  print k, v 
...  
quantity 6 
size large

What is the difference between the two? viewitems() returns the view object, which can reflect changes in the dictionary. For example, in the above example, if you add a key-value combination to d before using the two variables it and vi, the difference will be easy to see. .

>>> it = d.iteritems() 
>>> vi = d.viewitems() 
>>> d[&#39;newkey&#39;] = &#39;newvalue&#39; 
>>> d 
{&#39;newkey&#39;: &#39;newvalue&#39;, &#39;quantity&#39;: 6, &#39;size&#39;: &#39;large&#39;} 
>>> vi 
dict_items([(&#39;newkey&#39;, &#39;newvalue&#39;), (&#39;quantity&#39;, 6), (&#39;size&#39;, &#39;large&#39;)]) 
>>> it 
<dictionary-itemiterator object at 0x7f50ab898f70> 
>>> for k, v in vi: 
...  print k, v 
...  
newkey newvalue 
quantity 6 
size large 
>>> for k, v in it: 
...  print k, v 
...  
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
RuntimeError: dictionary changed size during iteration

In the third line, we inserted a new element into d, vi can continue to traverse, and the new traversal can reflect the changes in d, but when traversing it, an error message appears in dictionary The size changed during traversal and the traversal failed.

To summarize, in 2.x, the items() method was originally used, but because it was too wasteful of memory, the iteritems() method was added to return an iterator. In 3.x, the items() method was added. The behavior of () was modified to return a view object, so that the object returned can also reflect changes in the original dictionary. At the same time, the backward compatibility feature of viewitems() was added in 2.7.
So in 3.x there is no need to worry about the differences between the three, because only one items() method is retained.

I believe that the examples described in this article have certain reference value for everyone's Python programming.

【Related Recommendations】

1. Special Recommendation: "php Programmer Toolbox" V0.1 version download

2. Free Python video tutorial

3. Basic introduction to Python items() method

4. Instance of item() function in Python traversing dictionary

5. Introducing three methods of accessing dictionary

6. The difference between iteriitems and items in sorted

The above is the detailed content of Detailed explanation of the usage of items() series functions in Python. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn