Вы не можете использовать items
вместо этого iteritems
во всех местах в Python. Например, следующий код:
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)]
сломается, если вы используете 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'
То же самое относится и к элементам представления , которые доступны в Python 3.
Кроме того, поскольку items возвращает копию списка (key, value)
пар словаря , это менее эффективно, если вы все равно не хотите создавать копию.
В Python 2 лучше всего использовать iteritems
для итерации. 2to3
Инструмент может заменить его , items
если вы когда - нибудь решите перейти на Python 3.
iteritems
это итератор, поэтому он так полезен. Я почти никогда не хочу перебирать словарь как список. Итак, как правильно перебирать словарь с помощью генератора, совместимого с Python 2 и 3?