使用用户功能对Python列表进行排序。 (错误)

时间:2020-05-12 17:05:01

标签: python sorting typeerror

我有一个用空格分隔的字符串列表。我想按字符串的第二个拆分值对列表进行排序。

它可以工作,如果我使用lambda:

$hierarchy = array_column($folders, 'parent', 'id');

但是如果我想不使用lambda对其进行排序,则会显示错误:

Names = ['Ccc Eee', 'Bbb Aaa', 'Aaa Bbb', 'Zzz Zzz', 'Ddd Ddd']
# Names.sort(key=lambda name: name.split(' ')[1])
# print(Names) # ['Bbb Aaa', 'Aaa Bbb', 'Ddd Ddd', 'Ccc Eee', 'Zzz Zzz']

我在做什么错了?

更新:

def mysort(name):
    for i in range(0, len(name)):
        return name[i].split(' ')[1]

Names.sort(key=mysort(Names))
print(mysort(Names))

# output:
# Names.sort(key=mysort(Names))
# TypeError: 'str' object is not callable

2 个答案:

答案 0 :(得分:1)

两个问题。

  • 您不应调用该函数。

    就像你在做

    Names.sort(key=lambda name: name.split(' ')[1])
    

    不是

    Names.sort(key=lambda name: name.split(' ')[1](Names))
    

    ,你应该做

    Names.sort(key=mysort)
    

    不是

    Names.sort(key=mysort(Names))
    
  • 您不需要在函数中循环:

    def mysort(name):
        return name.split(' ')[1]
    

答案 1 :(得分:0)

def mysort(name):
    return name.split(' ')[1]

Names = ['Ccc Eee', 'Bbb Aaa', 'Aaa Bbb', 'Zzz Zzz', 'Ddd Ddd']
Names.sort(key=mysort)
print(Names)

这将为您提供确切的答案。
你的方法的问题是

  1. 在mysort函数内部,您正在使用不应该使用的循环
  2. 您在将参数传递给函数的同时提及了键,而您不应该这样做,因为key参数的值应该是一个采用单个参数并返回用于排序目的键的函数。