关于python:迭代按键排序的字典中的键/值对

Iterating over key/value pairs in a dict sorted by keys

我有以下代码,它只在dict中打印键/值对(这些对按键排序):

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

但是,调用iteritems()而不是items()产生相同的输出

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

现在,在这种情况下,我应该选择哪一个呢?我参考了Python教程,但它并没有真正回答我的问题。


在python 2.x中,两者都会给出相同的结果。它们之间的区别在于,items构造了一个包含字典全部内容的列表,而iteritems为您提供了一个迭代器,一次提取一个项目。一般来说,iteritems是一个更好的选择,因为它不需要太多的内存。但在这里,您将对结果进行排序,这样在这种情况下可能不会产生任何显著的差异。如果你不确定的话,1〔1〕是一个安全的赌注。如果性能真的很重要,那么测量两者,看看哪个更快。

在python 3.x中,iteritems被删除,items现在做了iteritems以前做的事情,解决了程序员浪费时间担心哪个更好的问题。:)

附带说明:如果要计算单词的出现次数,可以考虑使用collections.Counter而不是普通的dict(需要python 2.7或更高版本)。


按照标记答案:在python 2中使用iteritems(),在python 3中使用items()

另外,如果您需要同时支持(并且不使用2to3),请使用:

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