如何在不使用lambda的情况下按第二个元素对列表进行排序?

时间:2015-11-13 23:57:58

标签: python lambda

def rearrangelist(list):
    lst = input["list"]
    lst = ['list'[0]:1,'list'[1]:0,'list'[2]:3];
    print (sorted(list))

一旦我基本上希望根据每个列表元素定义的数量重新排列列表元素,我怎样才能在不使用lambda的情况下完成这项工作,例如:

list = [john, peter, olive]
john[2], peter [1] and olive[0]

我希望根据打印的数字对其进行排序:

olive, peter, john

不能使用“Zip()”功能

3 个答案:

答案 0 :(得分:1)

最简单的解决方案是使用operator.itemgetter函数

from operator import itemgetter

print(sorted(list, key=itemgetter(1)))

顺便说一句,list是变量的可怕名称,因为它会影响列表类型。

答案 1 :(得分:0)

  

已排序(可迭代[,cmp [,键[,反向]]])   从iterable中的项目返回一个新的排序列表。

     

可选参数cmp,key和reverse与list.sort()方法的含义相同。

     

key指定一个参数的函数,用于从每个列表元素中提取比较键:key = str.lower。默认值为None(直接比较元素)。

key就是您所需要的。为它提供一个返回比较键的函数

def SortBySecondElement(Element):
    return Element[1]

以这种方式调用排序方法

sorted(list, key=SortBySecondElement)

我希望这就是你想要的。

答案 2 :(得分:0)

您可以使用decorate-sort-undecorate idiom

>>> names = ['john', 'peter', 'olive']
>>> order = [2, 1, 0]

>>> decorated = zip(order, names)
>>> decorated
[(2, 'john'), (1, 'peter'), (0, 'olive')]

>>> sorted_decorated = sorted(decorated)
>>> sorted_decorated
[(0, 'olive'), (1, 'peter'), (2, 'john')]

>>> undecorated = zip(*sorted_decorated)[1]
>>> undecorated
('olive', 'peter', 'john')

如果你不能使用zip:

>>> decorated = [(order[index], names[index]) for index in range(len(order))]

>>> undecorated = [value[1] for value in decorated_sorted]