Czy używanie items()
zamiast iteritems()
wszędzie jest uzasadnione ? Dlaczego został iteritems()
usunięty z Pythona 3? Wydaje się świetną i przydatną metodą. Jaki jest tego powód?
Edycja: Aby wyjaśnić, chcę wiedzieć, jaki jest poprawny idiom do iteracji po słowniku w sposób podobny do generatora (jeden element na raz, nie wszystkie do pamięci) w sposób zgodny zarówno z Pythonem 2, jak i Pythonem 3 ?
źródło
iteritems
to iterator, dlatego jest tak przydatny. Prawie nigdy nie chcę przeglądać słownika jako listy. Więc jaki jest właściwy sposób iteracji słownika z generatorem w sposób zgodny zarówno z Pythonem 2, jak i 3?for key in some_dict
działa na obu - a2to3
narzędzie i tak przetłumaczyiteritems()
naitems()
...for k in d: d[k]
jest niepotrzebnie gadatliwy / niepytonicznyPodobnie jak zauważyć @Wessie,
dict.iteritems
,dict.iterkeys
idict.itervalues
(które zwracają iterację w Python2.x), jak równieżdict.viewitems
,dict.viewkeys
orazdict.viewvalues
(co powrót widok obiektów w Python2.x) były usunięte w Python3.xA
dict.items
,dict.keys
idict.values
używany do zwracania kopię listy słownika w Python2.x teraz powrócić Wyświetlanie obiektów w Python3.x, ale nie są one jeszcze tak samo jak iteratora .Jeśli chcesz zwrócić iterator w Python3.x, użyj
iter(dictview)
:źródło
Nie możesz używać
items
zamiast tegoiteritems
we wszystkich miejscach w Pythonie. Na przykład następujący kod:zepsuje się, jeśli użyjesz
items
:To samo dotyczy viewitems , które jest dostępne w Pythonie 3.
Ponadto, ponieważ elementy zwracają kopię listy
(key, value)
par ze słownika , jest to mniej wydajne, chyba że i tak chcesz utworzyć kopię.W Pythonie 2 najlepiej używać go
iteritems
do iteracji.2to3
Narzędzie może zastąpić goitems
, jeśli kiedykolwiek zdecydujesz się na uaktualnienie do Python 3.źródło
future.utils zapewnia zgodność z Pythonem 2 i 3
https://python-future.org/compatible_idioms.html
źródło