我有一个脚本,用于计算称为alice的文本文件中的单词数。通过https://developers.google.com/edu/python/dict-files的练习,我了解了这是如何工作的,这里显示了一个例外:
def get_count(word_count_tuple):
return word_count_tuple[1]
我的理解是,对项目进行排序时会调用此函数,并且它们会根据“ get_count”的值进行排序 “ get_count”的参数“ word_count_tuple”在任何阶段都不会使用/分配,并且会返回“ word_count_tuple 1”。 有人可以解释一下这里发生的事情以及它是如何工作的,因为我认为函数必须传递一个参数值,或者具有一个默认值,而事实并非如此。还是它以某种方式分配了钥匙,我想念它了?
这是完整的代码:
def word_count_dict(filename):
word_count = {}
input_file = open(filename, "r")
for line in input_file:
words = line.split()
for word in words:
word = word.lower()
if not word in word_count:
word_count[word] = 1
else:
word_count[word] += 1
input_file.close()
return(word_count)
def get_count(word_count_tuple):
return word_count_tuple[1]
def print_top(filename):
word_count = word_count_dict(filename)
items = sorted(word_count.items(), key = get_count, reverse = True)
for item in items[:20]:
print (item[0], item[1])
def main():
filename = "alice.txt"
print_top(filename)
if __name__ == '__main__':
main()
答案 0 :(得分:0)
您部分正确,您需要传递参数。 看这行
items = sorted(word_count.items(), key=get_count, reverse=True)
在这一行中,您将根据计数而不是单词返回word_count
的排序副本(以非递增顺序)。
看看key
。它需要一个函数,该函数返回一个值,通过该值我们需要对要排序的列表中的每个元素进行排序。
意思是如果word_count.items()
中的每个元素都是x
,那么我们将不得不使用x[1]
(它是值,x[0]
是键)对列表进行排序。
key
将一个函数或一个lambda对象作为其值,该值或“ lambda”对象“应用于”要排序的列表中的每个项目。
执行相同功能的另一种方法是
items = sorted(word_count.items(), key=lambda x: -x[1])
这将按值的负数对项目进行排序,以便我们获得相反的排序列表!
答案 1 :(得分:0)
是的,当您第一次看时,这有点令人困惑。
get_count
由sorted()
函数调用,并从word_count.items()
逐项传递项目。
如果您的字数词典看起来像这样:
{'mark': 2, 'the': 5, 'hotdog': 1}
然后items()
将是一个迭代器,其值如下:
[('mark', 2), ('the', 5), ('hotdog', 1)]
如此排序后,将其中的每一个都像get_count
,get_count(('mark', 2))
一样传递给get_count
,然后返回2
用作{排序。