Nie możesz używać items
zamiast tego iteritems
we wszystkich miejscach w Pythonie. Na przykład następujący kod:
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)]
zepsuje się, jeśli użyjesz 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'
To samo dotyczy viewitems , które jest dostępne w Pythonie 3.
Ponadto, ponieważ elementy zwracają kopię listy (key, value)
par ze słownika , jest to mniej wydajne, chyba że i tak chcesz utworzyć kopię.
W Pythonie 2 najlepiej używać go iteritems
do iteracji. 2to3
Narzędzie może zastąpić go items
, jeśli kiedykolwiek zdecydujesz się na uaktualnienie do Python 3.
iteritems
to iterator, dlatego jest tak przydatny. Prawie nigdy nie chcę przeglądać słownika jako listy. Więc jaki jest właściwy sposób iteracji słownika z generatorem w sposób zgodny zarówno z Pythonem 2, jak i 3?