按键排序的字典中遍历键值对

56 投票
2 回答
64457 浏览
提问于 2025-04-16 09:09

我有以下这段代码,它只是打印字典中的键值对(这些键值对是按键排序的):

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教程,但它并没有真正回答我的问题。

2 个回答

10

根据Mark的回答:在Python 2中,使用iteritems(),而在Python 3中,使用items()

另外,如果你需要同时支持这两个版本(并且不使用2to3工具),可以使用:

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

在Python 2.x中,使用这两种方法得到的结果是一样的。它们的区别在于,items会创建一个包含字典所有内容的列表,而iteritems则是一个迭代器,它一次只取出一个项目。一般来说,iteritems更好,因为它不需要占用太多内存。不过在这里你是在对结果进行排序,所以在这种情况下,使用哪种方法差别不大。如果你不确定,选择iteritems是个安全的选择。如果性能很重要,那就试着测一下两者的速度,看看哪个更快。

在Python 3.x中,iteritems被移除了,items现在做的事情和以前的iteritems一样,这样程序员就不用再担心哪个更好了。:)

顺便提一下:如果你是在统计单词出现的次数,可以考虑使用collections.Counter,而不是普通的字典(需要Python 2.7或更新版本)。

撰写回答