迭代按键排序的字典中的键/值对

时间:2010-12-29 00:32:21

标签: python

我有以下代码,它只是在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 tutorial,但它并没有真正回答我的问题。

2 个答案:

答案 0 :(得分:77)

在Python 2.x中,两者都会给你相同的结果。它们之间的区别在于items构造了一个包含字典全部内容的列表,而iteritems为您提供了一个一次一个地获取项目的迭代器。通常iteritems是更好的选择,因为它不需要那么多内存。但是在这里你要对结果进行排序,这样在这种情况下可能不会有任何显着差异。如果您有疑问iteritems是一个安全的赌注。如果性能真的很重要,那么测量两者并看看哪个更快。

在Python 3.x iteritems已被删除,items现在执行iteritems曾经做过的事情,解决了程序员浪费时间担心哪个更好的问题。 :)

作为旁注:如果您计算单词的出现次数,您可能需要考虑使用collections.Counter而不是普通的dict(需要Python 2.7或更高版本)。

答案 1 :(得分:10)

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

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

counts = count_words(filename)
for word in sorted(counts):
     count = counts[word]
相关问题