Você não pode usar items
em vez iteritems
de todos os lugares em Python. Por exemplo, o seguinte código:
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)]
irá quebrar se você usar 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'
O mesmo vale para os itens de exibição , disponíveis no Python 3.
Além disso, como os itens retornam uma cópia da lista de (key, value)
pares do dicionário , é menos eficiente, a menos que você deseje criar uma cópia de qualquer maneira.
No Python 2, é melhor usar iteritems
para iteração. A 2to3
ferramenta pode substituí-lo items
se você decidir atualizar para o Python 3.
iteritems
é um iterador, e é por isso que é tão útil. Eu quase nunca quero repetir um dicionário como uma lista. Então, qual é a maneira correta de iterar no dicionário com algo como um gerador compatível com o Python 2 e 3?