【问题标题】:Python Sort Multidimensional ArrayPython 排序多维数组
【发布时间】:2019-10-16 14:28:18
【问题描述】:

我需要按特定元素对数组数组进行排序

这是一个数组:

arr= 
[0, [71, 554, 258, 793]]
[1, [61, 415, 148, 593]]
[2, [91, 145, 658, 893]]

我需要能够按arr[0][0] 以及内部数组中的任何元素(如arr[0][1] 或arr[0][2])对其进行排序

目前,我可以使用 key=itemgetter(1) 对其进行排序 其中:itemgetter(1) - 是数组 [0, [71, 554, 258, 793]] 的第二个元素 在这个 cese = 71

from operator import itemgetter
array = sorted(array, key=itemgetter(1))
print(*array[:], sep="\n")

如何按内部数组[71, 554, 258, 793]中的任何元素对这个数组进行排序?

所以如果我按内部数组输出中的第二个元素排序应该是这样的:(第 145、415、554 列)

arr= 
[2, [91, 145, 658, 893]]
[1, [61, 415, 148, 593]]
[0, [71, 554, 258, 793]]

如果我按内部数组输出中的第三个元素排序应该是这样的:(第 148、258、658 列)

arr= 
[1, [61, 415, 148, 593]]
[0, [71, 554, 258, 793]]
[2, [91, 145, 658, 893]]

这有点类似于这个问题:Python Sort Multidimensional Array Based on 2nd Element of Subarray

【问题讨论】:

  • 排序(arr, key=lambda x: x[1][1])
  • 你是怎么坚持这个的?您只需将 1 常量替换为包含列号的变量即可。
  • @Prune 我希望它会这么直截了当,但事实并非如此,你看到索引 1 与第一个数组 [A, [B, C, D]] 的第二个元素有关,其中元素0 = A 元素 1 是 [B, C, D] 并且没有元素 2 它应该像调用数组元素 arr[0][2] 但是这种语法在 key=itemgetter(1) 的上下文中不起作用)
  • @Will 谢谢,这就是我需要的!!
  • @NickPV 随时将您需要的答案标记为“已接受”

标签: python arrays python-3.x sorting


【解决方案1】:

只需定义一个决定要使用的键的函数。 您可以使用偏函数根据键索引创建此函数

from functools import partial

def sort_key(si, x):
    return x[1][si]

sort_index = 1  # or 1 or 2

partial_sort_key = partial(sort_key, sort_index)

print(sorted(arr, key=partial_sort_key))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2018-07-11
    • 1970-01-01
    • 2013-08-02
    相关资源
    最近更新 更多