试图了解sort(key = ...)函数

时间:2020-06-29 14:06:06

标签: python sorting dictionary

我有以下列表:

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

我想通过使用“名称”键作为参考来对该列表进行排序。为此,我一直在研究的源代码提供了以下功能:

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

employees.sort(key = get_name)

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

我的问题是,口译员如何理解“雇员”参数是什么?它没有定义,实际上与“雇员”列表无关。对我来说有点困惑。

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

4 个答案:

答案 0 :(得分:0)

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

employee中的

def get_name(employee)是任意参数名称。您定义函数,可以根据需要命名参数。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

参数 group date column1 column2 index 0 A 2019-01-01 0.0 0.0 1 B 2019-01-02 0.0 0.0 2 A 2019-01-03 0.0 0.0 3 B 2019-01-04 1.0 1.0 4 A 2019-01-05 2.0 2.0 5 B 2019-01-06 3.0 3.0 只是赋予employee函数的变量的名称;您可以将其更改为get_name或其他任何方式,只要您还在函数主体中对其进行了更改,它仍然可以工作。

关于解释器如何知道foo是什么:Python是duck typed。您可以将变量的类型与employee函数完全不同,并且只要它具有可以使用get_name参数的get方法,它就可以正常工作

答案 3 :(得分:0)

首先,您必须将名称放在引号中,否则在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'}
]

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

相关问题