Est-il légitime d'utiliser items()
au lieu de iteritems()
partout? Pourquoi a été iteritems()
supprimé de Python 3? Cela semble être une méthode formidable et utile. Quel est le raisonnement derrière cela?
Edit: Pour clarifier, je veux savoir quel est l'idiome correct pour itérer sur un dictionnaire à la manière d'un générateur (un élément à la fois, pas tout en mémoire) d'une manière compatible avec Python 2 et Python 3 ?
la source
iteritems
c'est un itérateur, c'est pourquoi c'est si utile. Je ne veux presque jamais parcourir un dictionnaire sous forme de liste. Alors, quelle est la bonne façon d'itérer sur le dictionnaire avec quelque chose de générateur comme d'une manière compatible avec Python 2 et 3?for key in some_dict
fonctionne sur les deux - et l'2to3
outil se traduiraiteritems()
deitems()
toute façon ...for k in d: d[k]
c'était inutilement verbeux / impythoniqueTout comme @Wessie a noté
dict.iteritems
,dict.iterkeys
etdict.itervalues
(qui renvoient un itérateur en python2.X), ainsi quedict.viewitems
,dict.viewkeys
etdict.viewvalues
(qui retour vue des objets dans python2.X) ont tous été retirés dans Python3.xEt
dict.items
,dict.keys
etdict.values
utilisé pour renvoyer une copie de la liste du dictionnaire dans Python2.x renvoie maintenant des objets de vue dans Python3.x, mais ils ne sont toujours pas les mêmes que l' itérateur .Si vous souhaitez renvoyer un itérateur dans Python3.x, utilisez
iter(dictview)
:la source
Vous ne pouvez pas utiliser à la
items
placeiteritems
dans tous les endroits en Python. Par exemple, le code suivant:se cassera si vous utilisez
items
:Il en va de même pour viewitems , qui est disponible dans Python 3.
De plus, comme items renvoie une copie de la liste des
(key, value)
paires du dictionnaire , il est moins efficace, à moins que vous ne souhaitiez quand même créer une copie.Dans Python 2, il est préférable d'utiliser
iteritems
pour l'itération. L'2to3
outil peut le remplacer paritems
si vous décidez de passer à Python 3.la source
future.utils permet la compatibilité avec Python 2 et 3
https://python-future.org/compatible_idioms.html
la source