python使用dict调用的函数-调用具有参数但未明确列出参数的函数

时间:2018-09-23 07:37:28

标签: python python-3.7

我有一个脚本,用于计算称为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()

2 个答案:

答案 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_countsorted()函数调用,并从word_count.items()逐项传递项目。

如果您的字数词典看起来像这样:

{'mark': 2, 'the': 5, 'hotdog': 1}

然后items()将是一个迭代器,其值如下:

[('mark', 2), ('the', 5), ('hotdog', 1)]

如此排序后,将其中的每一个都像get_countget_count(('mark', 2))一样传递给get_count,然后返回2用作{排序。