Подтвердить что ты не робот

Итерация по парам ключ/значение в дикторе, отсортированном по ключам

У меня есть следующий код, который просто печатает пары ключ/значение в dict (пары сортируются по ключам):

for word, count in sorted(count_words(filename).items()):
    print word, count

Однако вызов iteritems() вместо items() приводит к тому же выводу

for word, count in sorted(count_words(filename).iteritems()):
    print word, count

Теперь, какой я должен выбрать в этой ситуации? Я посоветовался с учебником Python, но на самом деле он не отвечает на мой вопрос.

4b9b3361

Ответ 1

В Python 2.x оба дадут вам тот же результат. Разница между ними заключается в том, что items создает список, содержащий все содержимое словаря, тогда как iteritems дает вам итератор, который выбирает элементы по одному. В целом iteritems - лучший выбор, потому что он не требует так много памяти. Но здесь вы сортируете результат, поэтому, вероятно, он не будет иметь существенных различий в этой ситуации. Если вы сомневаетесь, iteritems - это безопасная ставка. Если производительность действительно имеет значение, измерьте оба и посмотрите, что быстрее.

В Python 3.x iteritems был удален, а items теперь делает то, что iteritems использовал, решая проблему программистов, теряющих время, беспокоясь о том, что лучше.:)

В качестве побочного примечания: если вы считаете вхождения слов, вы можете использовать collections.Counter вместо простого dict (требуется Python 2.7 или новее).

Ответ 2

В соответствии с ответом Marks: в Python 2 используйте iteritems(), в Python 3 используйте items().

И дополнительно; Если вам необходимо поддерживать оба (и не использовать 2to3), используйте:

counts = count_words(filename)
for word in sorted(counts):
     count = counts[word]