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_count
被 sorted()
函数调用,并从 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
用作排序的关键字。
我有一个脚本用于计算一个名为 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_count
被 sorted()
函数调用,并从 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
用作排序的关键字。