为什么 key= 没有被记录?

问题描述 投票:0回答:1

我是一个初学者,所以我问这个问题可能是完全错误的,但我正在学习一门课程,并且我对如何使用函数对字典进行排序感到困惑,该函数返回该字典内的键。

我必须做一些测试来看看我可以在什么条件下使用 key= ,我意识到我可以在 max 上使用它,但是当尝试将它与 sort 一起使用时我被难住了,我在网上查找了如何使用 key =,我得到的只是

keys()
,我是否缺少一些理解,或者这是没有很好记录的内容?

我尝试过的:

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}
]

print(students.sort(key(name_alphabetical))

什么有效:

def n(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}
]

students.sort(key=n)
print(students)

想要的结果:

[
    { '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 }
]
python python-3.x
1个回答
2
投票

记录为

sorted()

sorted(iterable, /, *, key=None, reverse=False)

key 指定一个参数函数,用于从 iterable 中的每个元素提取比较键(例如,

key=str.lower
)。默认值为
None
(直接比较元素)。

list.sort()

sort(*, key=None, reverse=False)

key 指定一个参数函数,用于从每个列表元素中提取比较键(例如,

key=str.lower
)。列表中每一项对应的键都会计算一次,然后用于整个排序过程。
None
的默认值意味着列表项直接排序,而不计算单独的键值。

您还可以使用 REPL 来获得更紧凑的文档版本:

>>> help(list.sort)

Help on method_descriptor:

sort(self, /, *, key=None, reverse=False)

    Sort the list in ascending order and return None.

    The sort is in-place (i.e. the list itself is modified) and stable (i.e. the
    order of two equal elements is maintained).

    If a key function is given, apply it once to each list item and sort them,
    ascending or descending, according to their function values.

    The reverse flag can be set to sort in descending order.
© www.soinside.com 2019 - 2024. All rights reserved.