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()”功能
答案 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]