为何Python中key=参数文档不完善?sort方法key参数使用困惑
如何用返回字典键的函数对字典列表排序?
你遇到的问题是两个细节错误,和key参数的理解误区无关,也不是文档不完善:
错误1:key参数的传参方式错了
sort方法的key需要传入函数本身(函数对象),而不是调用函数的结果。你写的key(name_alphabetical)是在调用函数,属于语法错误,正确写法是key=name_alphabetical——用赋值符号把函数对象传给参数。
错误2:list.sort()的返回值是None
sort是原地修改列表的方法,不会返回排序后的列表。你直接print(students.sort(...))会打印None,正确步骤是先调用sort完成排序,再单独打印列表。
修正你的尝试代码
把这两个错误改过来,代码就能正常运行:
def name_alphabetical(student): return student["name"] students = [ {"name": "Hannah", "grade_average": 83}, {"name": "Charlie", "grade_average": 91}, {"name": "Peter", "grade_average": 85}, {"name": "Rachel", "grade_average": 79}, {"name": "Lauren", "grade_average": 92} ] # 先原地排序,传函数对象给key students.sort(key=name_alphabetical) # 再打印排序后的列表 print(students)
关于key参数的说明
不管是max还是sort,key参数的逻辑是一致的:它接受一个函数,这个函数会被依次应用到列表的每个元素上,函数返回的值会作为这个元素的"排序依据"。你之前搜到的keys()是字典的方法,用来获取字典的所有键,和这里的key参数是完全不同的东西,别混淆就行。
运行修正后的代码,就能得到你想要的结果:
[ {'name': 'Charlie', 'grade_average': 91}, {'name': 'Hannah', 'grade_average': 83}, {'name': 'Lauren', 'grade_average': 92}, {'name': 'Peter', 'grade_average': 85}, {'name': 'Rachel', 'grade_average': 79} ]
内容的提问来源于stack exchange,提问作者user21809407
相关产品推荐
相关产品推荐

