繁体   English   中英

试图理解 sort(key = ...) function

[英]trying to understand sort(key = …) function

我有以下列表:

employees = [
    {'Name': Allan, 'Age': 25, 'Salary': 10000},
    {'Name': Sharon, 'Age': 30, 'Salary': 8000},
    {'Name': John, 'Age': 18, 'Salary': 1000} 
]

我想通过将“名称”键作为参考对这个列表进行排序。 为此,我一直在研究的来源给出了以下 function:

def get_name(employee):
    return employee.get('Name')

employees.sort(key = get_name)

如果我现在运行 print(employees),它会根据需要对字典进行分类。

我的问题是,解释器如何理解,参数“员工”是什么? 它没有定义,实际上与“员工”列表无关。 这对我来说有点混乱。

如果有人解释,我将不胜感激。 谢谢!

sort定义了它将如何处理key sort期望key可调用的(即函数),它将调用并将列表中的一个元素传递给它。 sort将为列表中的每个元素调用key 您传递的 function ( get_name ) 必须与此定义匹配,而不是相反。

def get_name(employee) employee的employee 是任意参数名称。 您定义 function,您可以随意命名参数。

employee是代码作者为 function get_name的参数命名的名称,选择它可能是为了使与外部结构的关系更清晰。 您可以用任何有效的变量名称替换 function(在两个地方)中的employee ,它的工作方式相同:

def get_name(my_dict):
    return my_dict.get('Name')

参数employee只是赋予get_name function的变量名; 您可以将其更改为foo或其他任何内容,只要您也在 function 主体中更改它,它仍然可以工作。

至于解释器如何知道employee是什么: Python is duck typed 您可以将完全不同类型的变量get_name function 中,只要它有一个可以采用'Name'参数的get方法,它就可以正常工作。

首先,您必须将名称放在引号中,否则在 python 中是非法的。

那么也许这会让它更容易理解:

>>> employees = [
...     {'Name': 'Allan', 'Age': 25, 'Salary': 10000},
...     {'Name': 'Sharon', 'Age': 30, 'Salary': 8000},
...     {'Name': 'John', 'Age': 18, 'Salary': 1000} 
... ]
>>> 
>>> sorted( employees, key = lambda x : x['Name'] )
[
    {'Salary': 10000, 'Age': 25, 'Name': 'Allan'},
    {'Salary': 1000, 'Age': 18, 'Name': 'John'},
    {'Salary': 8000, 'Age': 30, 'Name': 'Sharon'}
]

请注意,我没有使用任何外部 function,只是 lambda,它没有名称,只有一个参数(在我们的例子中是x ),这是您列表中的项目之一,它返回的key根据列表将被排序。 您可以尝试返回x['Salary']x['Age']并查看结果。 get_name这个名字很偶然,绝对没有影响。 使用 lambdas 实际上要容易得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM