Vous ne pouvez pas utiliser à la itemsplace iteritemsdans 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 iteritemspour l'itération. L' 2to3outil peut le remplacer par itemssi vous décidez de passer à Python 3.
iteritemsc'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?