Non è possibile utilizzare itemsinvece iteritemsin tutti i luoghi in Python. Ad esempio, il seguente codice:
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)]
si romperà se si utilizza 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'
Lo stesso vale per viewitems , disponibile in Python 3.
Inoltre, poiché gli articoli restituiscono una copia dell'elenco di (key, value)coppie del dizionario , è meno efficiente, a meno che tu non voglia comunque crearne una copia.
In Python 2, è meglio usarlo iteritemsper l'iterazione. Lo 2to3strumento può sostituirlo con itemsse decidi di aggiornare a Python 3.
iteritemsè un iteratore, motivo per cui è così utile. Non voglio quasi mai scorrere su un dizionario come elenco. Quindi qual è il modo corretto di scorrere il dizionario con qualcosa di simile a un generatore in un modo compatibile con Python 2 e 3?