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