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

python function calling with dict - calling a function which has parameters but not listing the parameter explicitly

我有一个脚本用于计算一个名为 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' 在任何阶段都不是 used/assigned,返回 'word_count_tuple1'。 有人可以解释这里发生了什么,它是如何工作的,因为我认为函数必须传递一个参数值,或者有一个默认值,而这不是。或者它是以某种方式分配给密钥的,但我没有找到它?

这是完整代码:

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()

你部分正确,你需要传递一个参数。 看这行

items = sorted(word_count.items(), key=get_count, reverse=True)

在这一行中,您将根据计数而不是单词返回 word_count 的排序(非递增)副本。

看看key。它需要一个函数 returns 一个值,我们需要根据该值对我们正在排序的列表中的每个元素进行排序。

意味着如果 word_count.items() 中的每个元素都是 x,那么我们将不得不使用 x[1] 对列表进行排序,x[1] 是值,x[0] 是键。

key 将一个函数或一个 lambda 对象作为它的值,它是 "applied" 在要排序的列表中的每个项目上。

实现相同功能的另一种方法是

items = sorted(word_count.items(), key=lambda x: -x[1])

这按值的负数对项目进行排序,以便我们得到反向排序的列表!

是的,当您第一次看到它时,这有点令人困惑。

get_countsorted() 函数调用,并从 word_count.items() 逐个传递项目。

如果您的字数统计词典如下所示:

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

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

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

So sorted 获取其中的每一个并将其传递给 get_count,例如 get_count(('mark', 2))get_count 然后 returns 2 其中 sorted 用作排序的关键字。