Apakah sah untuk digunakan items()
daripada iteritems()
di semua tempat? Mengapa iteritems()
dihapus dari Python 3? Sepertinya metode yang hebat dan berguna. Apa alasan di baliknya?
Sunting: Untuk memperjelas, saya ingin tahu apa idiom yang benar untuk iterasi melalui kamus dengan cara seperti generator (satu item pada satu waktu, tidak semua ke memori) dengan cara yang kompatibel dengan Python 2 dan Python 3 ?
sumber
iteritems
adalah iterator, oleh karena itu sangat berguna. Saya hampir tidak pernah ingin beralih ke kamus sebagai daftar. Jadi apa cara yang benar untuk beralih ke kamus dengan sesuatu seperti generator dengan cara yang kompatibel dengan Python 2 dan 3?for key in some_dict
bekerja pada keduanya - dan2to3
alat ini akan menerjemahkaniteritems()
untukitems()
tetap ...for k in d: d[k]
tidak perlu verbose / unpythonicSama seperti @Wessie perhatikan
dict.iteritems
,,dict.iterkeys
dandict.itervalues
(yang mengembalikan iterator dengan Python2.x) jugadict.viewitems
,dict.viewkeys
dandict.viewvalues
(yang mengembalikan objek tampilan dalam Python2.x) semuanya dihapus dalam Python3.xDan
dict.items
,dict.keys
dandict.values
digunakan untuk mengembalikan salinan daftar kamus di Python2.x sekarang mengembalikan objek tampilan di Python3.x, tetapi mereka masih tidak sama dengan iterator .Jika Anda ingin mengembalikan iterator di Python3.x, gunakan
iter(dictview)
:sumber
Anda tidak dapat menggunakan
items
bukannyaiteritems
di semua tempat di Python. Misalnya, kode berikut:akan rusak jika Anda menggunakan
items
:Hal yang sama berlaku untuk viewitems , yang tersedia dalam Python 3.
Juga, karena item mengembalikan salinan daftar
(key, value)
pasangan kamus , itu kurang efisien, kecuali jika Anda tetap ingin membuat salinan.Dalam Python 2, yang terbaik adalah menggunakan
iteritems
untuk iterasi. The2to3
alat bisa menggantinya denganitems
jika Anda pernah memutuskan untuk meng-upgrade ke Python 3.sumber
future.utils memungkinkan untuk kompatibilitas python 2 dan 3
https://python-future.org/compatible_idioms.html
sumber