В Python 2.x - .items()
возвращен список пар (ключ, значение). В Python 3.x .items()
теперь itemview
объект, который ведет себя по-разному - поэтому он должен быть повторен или материализован ... Итак, list(dict.items())
требуется для того, что было dict.items()
в Python 2.x.
Python 2.7 также имеет немного задний порта для ключа обработки, в том , что у вас есть viewkeys
, viewitems
и viewvalues
методы, наиболее полезное существо , viewkeys
который ведет себя больше как set
(вы бы ожидать от dict
).
Простой пример:
common_keys = list(dict_a.viewkeys() & dict_b.viewkeys())
Даст вам список общих ключей, но опять же, в Python 3.x - просто используйте .keys()
вместо этого.
Python 3.x, как правило, сделан более «ленивым», т.е. map
теперь он эффективен itertools.imap
, zip
есть itertools.izip
и т. Д.
iteritems
это итератор, поэтому он так полезен. Я почти никогда не хочу перебирать словарь как список. Итак, как правильно перебирать словарь с помощью генератора, совместимого с Python 2 и 3?for key in some_dict
работает на обоих - и2to3
инструмент будет переводитьiteritems()
вitems()
любом случае ...for k in d: d[k]
это излишне многословно / непифоничноПодобно тому , как отмечено @Wessie,
dict.iteritems
,dict.iterkeys
иdict.itervalues
(которые возвращают итератор в Python2.x), а такжеdict.viewitems
,dict.viewkeys
иdict.viewvalues
(которые возвращают объекты вид в Python2.x) были удалены в Python3.xИ
dict.items
,dict.keys
иdict.values
используемый для возврата копии списка словаря в Python2.x, теперь возвращают объекты представления в Python3.x, но они по-прежнему не совпадают с итераторами .Если вы хотите вернуть итератор в Python3.x, используйте
iter(dictview)
:источник
Вы не можете использовать
items
вместо этогоiteritems
во всех местах в Python. Например, следующий код:сломается, если вы используете
items
:То же самое относится и к элементам представления , которые доступны в Python 3.
Кроме того, поскольку items возвращает копию списка
(key, value)
пар словаря , это менее эффективно, если вы все равно не хотите создавать копию.В Python 2 лучше всего использовать
iteritems
для итерации.2to3
Инструмент может заменить его ,items
если вы когда - нибудь решите перейти на Python 3.источник
future.utils обеспечивает совместимость с python 2 и 3
https://python-future.org/compatible_idioms.html
источник