Bạn không thể sử dụng items
thay thế iteritems
ở tất cả các nơi trong Python. Ví dụ: đoạn mã sau:
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)]
sẽ bị hỏng nếu bạn sử dụng 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'
Điều này cũng đúng với viewitems , có sẵn trong Python 3.
Ngoài ra, vì các mục trả về một bản sao danh sách các (key, value)
cặp của từ điển , nên nó kém hiệu quả hơn, trừ khi bạn muốn tạo một bản sao.
Trong Python 2, tốt nhất là sử dụng iteritems
để lặp lại. Công 2to3
cụ này có thể thay thế nó items
nếu bạn quyết định nâng cấp lên Python 3.
iteritems
là một trình vòng lặp, đó là lý do tại sao nó rất hữu ích. Tôi gần như không bao giờ muốn lặp lại từ điển như một danh sách. Vậy đâu là cách chính xác để lặp lại từ điển với trình tạo thứ gì đó giống như cách tương thích với cả Python 2 và 3?