NameError:当key = sort用作sorted()的参数时,未定义名称“ sort”

时间:2019-02-04 08:41:19

标签: python sorting

我在控制台上遇到以下错误

newList = sorted(l,key=sort) 
NameError: name 'sort' is not defined

执行以下代码后:

if __name__ == '__main__':
    l= [[input(), float(input())] for _ in range(int(input()))]
    print( l)
    new = sorted(l,key=sort)
    print(new)

given文章中,我了解到key中的sorted()参数可以使用用户/内置的Python方法。我试图按字母顺序对列表进行排序,因此我通过了key=sort,并理解它将按字母顺序对列表进行排序。

请帮我解决我在哪里出问题。

2 个答案:

答案 0 :(得分:3)

sorted()函数具有一个名为key的可选参数,该参数将函数作为其值。此键函数在排序之前转换每个元素,它获取值并返回1个值,然后在排序中使用该值代替原始值

示例:
如果有元组列表,
li = [('p1', 20), ('p2', 10), ('p3', 30)]
并且您想要对列表中的元素进行排序,使得结果顺序如下:
输出:li = [('p2', 10), ('p1', 20), ('p3', 30)]
然后,您要做的就是根据每个元组中的第二个元素对元组进行排序。 为此,我们需要使用一种自定义方法,该方法将应用于每个元素,并且将根据每个元素的代表(即KEY)对元素进行排序
因此,其语法将如下所示:
sorted(li, key=lambda x: x[1])

编辑:

排序本身就是一个函数,用于按特定顺序排列元素。但是,它不能用于为列表中的每个元素提取代表(即KEY)。

答案 1 :(得分:1)

嗯,sort不是用户/内置的Python函数。它是列表中的方法,但不是全局可访问的名称。即使您使用它(通过key=list.sort),也不会得到您想要的结果,因为键功能用于在排序之前转换每个 element

默认情况下(不指定key参数),sorted应该已经按字母顺序对字符串进行排序(排序),与包含以字符串作为第一项的列表的列表相同。如果要将"A""a"(以及"Z""z")一起排序,可以使用键函数str.lower,但是您需要将其仅应用于内部列表的第一个元素:

new = sorted(l, key=lambda x: x[0].lower())