我有以下列表:
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),它会根据需要对字典进行排序。
我的问题是,口译员如何理解“雇员”参数是什么?它没有定义,实际上与“雇员”列表无关。对我来说有点困惑。
如果有人解释,我将不胜感激。谢谢!
答案 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,实际上事情要容易得多。