Vous ne pouvez pas utiliser à la items
place iteritems
dans tous les endroits en Python. Par exemple, le code suivant:
class C:
def __init__(self, a):
self.a = a
def __iter__(self):
return self.a.iteritems()
>>> c = C(dict(a=1, b=2, c=3))
>>> [v for v in c]
[('a', 1), ('c', 3), ('b', 2)]
se cassera si vous utilisez items
:
class D:
def __init__(self, a):
self.a = a
def __iter__(self):
return self.a.items()
>>> d = D(dict(a=1, b=2, c=3))
>>> [v for v in d]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __iter__ returned non-iterator of type 'list'
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 par items
si vous décidez de passer à Python 3.
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?