在python中排序多维数组

Ali*_*sky 1 python arrays sorting list multidimensional-array

我有一个数组,像这样填充它

arr = [[],[]]
arr[0].append(post.attrib['href']) #strings
arr[1].append(int(klass)) # int
Run Code Online (Sandbox Code Playgroud)

我需要通过arr [1]对整个数组进行排序,例如输入:

[['string3', 'string45', 'string25'], [46, 2, 12]]
Run Code Online (Sandbox Code Playgroud)

并输出:

[['string45', 'string25', 'string3'], [2, 12, 46]]
Run Code Online (Sandbox Code Playgroud)

我试过了

arr[0].sort(key = x[1].__getitem__) 
arr[0].sort(key=lambda x: x[1])
arr = sorted(arr, key=itemgetter(1))
Run Code Online (Sandbox Code Playgroud)

但是这一切都不正确

Abh*_*jit 7

在对复合元素进行排序时,使用(zipitertools.izip)创建一对要排序的元素,并使用operator.itemgetter选择正确的键.最后使用转换回原始格式zip.

from operator import itemgetter
zip(*sorted(zip(*arr), key = itemgetter(1)))
[('string45', 'string25', 'string3'), (2, 12, 46)]
Run Code Online (Sandbox Code Playgroud)

这个想法可以扩展到列表中的多个键.

执行步骤

>>> arr #Original Array
[['string3', 'string45', 'string25'], [46, 2, 12]]
>>> zip(*arr) #Unpacking the array, transposes it
[('string3', 46), ('string45', 2), ('string25', 12)]
>>> sorted(zip(*arr), key = itemgetter(1)) #Sort the Transpose Array based on second element
[('string45', 2), ('string25', 12), ('string3', 46)]
>>> zip(*sorted(zip(*arr), key = itemgetter(1))) #Transpose the result to generate the original format
[('string45', 'string25', 'string3'), (2, 12, 46)]
Run Code Online (Sandbox Code Playgroud)

  • @Totem:它适用于`zip`而不是`sorted`.`sorted`的输出被解压缩并传递给`zip`.让我在回答中添加执行步骤 (2认同)