Explication détaillée de l'utilisation des fonctions de la série items() en Python

Y2J
Libérer: 2017-05-17 15:11:37
original
14363 Les gens l'ont consulté

Cet article présente principalement l'utilisation de la série de fonctions Dictionary items() en Python. C'est une fonction très pratique. Les amis qui en ont besoin peuvent s'y référer. Dictionary items() série de fonctions en Python avec des exemples d'utilisation, a une bonne valeur de référence pour la programmation Python. L'analyse spécifique est la suivante :

Regardons d'abord un exemple :

La fonction de ce programme est très simple, qui est de générer des
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;)
Copier après la connexion
balises HTML

. Notez que le module html ne peut être utilisé que dans Uniquement disponible dans Python 3.x. Au début, je viens de remarquer que le type de dictionnaire

variable

des keyvals qui génère la liste de balises attribut est construit de manière intéressante. Deux % correspondent à un. article, donc après avoir vérifié les informations pertinentes, j'ai découvert beaucoup de choses, que je vais résumer ici. Remarque : Pour les versions utilisées par tous les interpréteurs Python ci-dessous, 2.x correspond à 2.7.3, et 3.x correspond à 3.4.1

Dans Python 2.x, éléments de la documentation officielle La méthode est la suivante : générer une liste de paires (clé, valeur), comme celle-ci :


Dans le processus de recherche de
>>> d = {&#39;size&#39;: &#39;large&#39;, &#39;quantity&#39;: 6} 
>>> d.items() 
[(&#39;quantity&#39;, 6), (&#39;size&#39;, &#39;large&#39;)]
Copier après la connexion
dans

, j'en ai accidentellement vu une. sur stackoverflow Question : Quelle est la différence entre dict.items() et dict.iteritems() ? , la première réponse signifie à peu près ceci : "Au début, items() renvoyait une liste contenant tous les éléments de dict comme ci-dessus, mais comme cela gaspillait trop de mémoire, elle a été ajoutée plus tard (Remarque : le Un groupe de fonctions iteritems(), iterkeys() et itervalues() qui ont commencé à apparaître dans Python 2.2 sont utilisés pour renvoyer un itérateur pour économiser de la mémoire, mais dans 3.x items() renvoie lui-même un tel itérateur. Par conséquent, le <. 🎜> le comportement de items() dans 3.x est cohérent avec le comportement de iteritems() dans 2.x, et la fonction iteritems() est supprimée »

Mais c'est plus intéressant Oui, bien que cela. La réponse a été acceptée, les commentaires ci-dessous ont souligné que cette déclaration n'est pas exacte. Le comportement de items() dans 3.x est différent de iteritems() dans 2.x. Il renvoie en fait un objet " protocole de séquence complet . ", cet

objet

peut refléter les changements dans dict. Plus tard, une autre fonction viewitems() a été ajoutée à Python 2.7 et ce comportement dans 3.x Pour être cohérent Pour confirmer les affirmations dans le commentaires, j'ai fait le test suivant, en faisant attention à la version Python utilisée dans le test : Test 1 (Python 2.7.3) :

Test 2 (Python 3.4.1 ):

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;)])
Copier après la connexion
Vous pouvez voir que dans Python 3.x, les deux méthodes iteritems() et viewitems() ont été supprimées, et item() Le résultat obtenu est cohérent avec viewitems() en 2 .x.

Le contenu renvoyé par iteritems() et viewitems() dans 2.x peut être parcouru en utilisant for Comme indiqué ci-dessous

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)])
Copier après la connexion

Quelle est la différence entre les deux ? viewitems() renvoie l'objet view, qui peut refléter les modifications apportées au dictionnaire. Par exemple, dans l'exemple ci-dessus, si vous ajoutez une combinaison clé-valeur à d avant d'utiliser les deux variables it et vi, la différence sera facile à voir. .

>>> for k, v in it: 
...  print k, v 
...  
quantity 6 
size large 
>>> for k, v in vi: 
...  print k, v 
...  
quantity 6 
size large
Copier après la connexion
Dans la troisième ligne, nous avons inséré un nouvel élément dans d, vi peut continuer à parcourir, et le nouveau parcours peut refléter les changements dans d, mais lors du parcours, une erreur est signalée. que la taille du dictionnaire change pendant le parcours et que le parcours échoue.

Pour résumer, dans 2.x, la méthode items() était à l'origine utilisée, mais comme elle gaspillait trop de mémoire, la méthode iteritems() a été ajoutée pour renvoyer un itérateur. la méthode items() a été ajoutée. Le comportement de () a été modifié pour renvoyer un objet de vue, afin que l'objet renvoyé puisse également refléter les modifications apportées au dictionnaire d'origine. En même temps, la fonctionnalité de compatibilité ascendante de viewitems() a été ajoutée. en 2.7.
>>> 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
Copier après la connexion
Donc, dans 3.x, il n'y a pas lieu de s'inquiéter des différences entre les trois, car une seule méthode items() est conservée.

Je crois que les exemples décrits dans cet article ont une certaine valeur de référence pour la programmation Python de chacun.


【Recommandations associées】

1.

Recommandation spéciale

 : Téléchargez la version V0.1 de "php Programmer Toolbox" 2. Tutoriel vidéo Python gratuit

3 Méthode Items() pour une introduction de base à Python

4. Exemple de fonction item() dans le dictionnaire de traversée Python

5.Présentation de trois méthodes d'accès au dictionnaire

6. La différence entre les articles itéri et les articles triés

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal