def salary_sort(thing):
def importantparts(thing):
for i in range(1, len(thing)):
a=thing[i].split(':')
output = (a[1],a[0],a[8])
sortedlist = sorted(output, key = lambda item: item[2], reverse=True)
print(sortedlist)
return importantparts(thing)
salary_sort(employee_data)
这个函数的作用是按姓名的薪水对其进行排序。 我设法把名字和薪水分开,但我似乎无法按他们的薪水来分类
“Thing”又名“employee\u data”
employee_data = ["FName LName Tel Address City State Zip Birthdate Salary",
"Arthur:Putie:923-835-8745:23 Wimp Lane:Kensington:DL:38758:8/31/1969:126000",
"Barbara:Kertz:385-573-8326:832 Ponce Drive:Gary:IN:83756:12/1/1946:268500",
"Betty:Boop:245-836-8357:635 Cutesy Lane:Hollywood:CA:91464:6/23/1923:14500",.... etc.]
输出
['Putie', 'Arthur', '126000']
['Kertz', 'Barbara', '268500']
['Betty', 'Boop', '14500']
['Hardy', 'Ephram', '56700']
['Fardbarkle', 'Fred', '780900']
['Igor', 'Chevsky', '23400']
['James', 'Ikeda', '45000']
['Cowan', 'Jennifer', '58900']
['Jesse', 'Neal', '500']
['Jon', 'DeLoach', '85100']
['Jose', 'Santiago', '95600']
['Karen', 'Evich', '58200']
['Lesley', 'Kirstin', '52600']
['Gortz', 'Lori', '35200']
['Corder', 'Norma', '245700']
您的主要问题是用每个新的行重置
output
序列,而不是先累积数据然后排序。另一个问题是,外部函数声明了一个内部函数并调用了它,但是内部函数没有返回任何内容。最后,如果对字符串进行排序而不将其转换为整数,则会得到字母数字排序:('9'、'81'、'711'、'6'),这可能不是您所期望的。你知道吗顺便说一句,外部-内部函数模式在这里没有用,您可以使用一个简单的直接函数。你知道吗
结果如预期:
如果您更喜欢数字作为工资,您可以进行更高一步的转换:
结果也是正确的:
问题是,您要根据salary值而不是整个数组来排序单个元素(意思是
['Putie', 'Arthur', '126000']
)。你知道吗另外,由于要对薪资进行排序,必须将其转换为
int
,否则将使用字母排序。你知道吗您可以查看以下内容:
正如预期的那样:
我所做的是将雇员的所有相关数据推送到一个新数组中(命名为
data
),然后使用lambda
函数对这个数组进行排序。你知道吗您的代码有很多问题,但关键的一点是,您在创建每一行时对它进行排序,而不是列表列表。你知道吗
此外:
importantparts()
不返回任何内容(因此salarysort()
不返回任何内容)。您需要将
Salary
字段强制转换为int
,以便按值正确排序(它们的字段宽度不同,因此字母数字排序将不正确)。最后,您不需要使用
for i in range(1, len(thing)):
,您可以直接在thing
上迭代,使用slice删除第一个元素1。1请注意,最后一个本身并不是错误的,但直接迭代iterable被认为更“Pythonic”。
输出:
相关问题 更多 >
编程相关推荐