Sie können itemsstattdessen nicht iteritemsan allen Stellen in Python verwenden. Zum Beispiel der folgende Code:
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)]
wird brechen, wenn Sie verwenden 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'
Gleiches gilt für Ansichtselemente , die in Python 3 verfügbar sind.
Da Elemente eine Kopie der Paarliste des Wörterbuchs zurückgeben (key, value), ist dies weniger effizient, es sei denn, Sie möchten trotzdem eine Kopie erstellen.
In Python 2 ist es am besten, es iteritemsfür die Iteration zu verwenden. Das 2to3Tool kann es ersetzen, itemswenn Sie sich jemals für ein Upgrade auf Python 3 entscheiden.
iteritemsein Iterator ist, weshalb es so nützlich ist. Ich möchte fast nie ein Wörterbuch als Liste durchlaufen. Was ist also der richtige Weg, um das Wörterbuch mit einem Generator zu iterieren, der sowohl mit Python 2 als auch mit Python 3 kompatibel ist?