[英]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.