多维排序[Python]

时间:2017-05-12 18:56:21

标签: python sorting multidimensional-array

这是结构:

            #  0. [File1]
            #  1. [File2]
            #  2. [X] entre f1 et f2
            #  3. [identites] |
            #  4. [position] (position in f1, position inf2)
            #  5. [hashcode] 
    results_struct = ([nb_comon_ngs, idents_sum, gaps_sum, alength_sum, word_position, ns_sum])

假设我想在" f1"中的位置上对该结构进行排序。 :cell [4] [0]。

示例:

results_struct = [
[14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14],
[32,  4, 16, 13, 13, 32, 22, 18, 22, 31, 24, 23, 40, 35],
[19,  0,  2,  2,  1, 19,  0,  0,  2, 19,  2,  1,  1,  3],
[51,  4, 18, 15, 14, 51, 22, 18, 24, 50, 26, 24, 41, 38],
[(48, 112), (60, 51), (45, 49), (46, 50), (59, 134), (49, 113), (34, 27), (35, 28), (43, 47), (50, 114), (53, 121), (57, 132), (32, 25), (41, 45)],
['ilya', 'pluspas', 'pasbeaucoup', 'beaucoupplus', 'estplus', 'yaune', 'pourdépaserde', 'dépaserdela', 'oupluspas', 'enadeux', 'queontailleurs', 'laestplus', 'suffisammentpourdépaserde', '100oupluspas']

#becomes
[
    [14, ...],
    [40, ...], 
    [1, ...], 
    [41, ...], 
    [(32, 25), (34, 27), (35, 28), (41, 45), (43, 47), (45, 49), (46, 50), (48, 112), (49, 113), (50, 114), (53, 121), (57, 132),(59, 134), (60, 51)], 
    ['suffisammentpourdépaserde', ...]
]

为什么:

r = sorted(results_struct, key=lambda o: o[4][0])

不工作?

它引发了" TypeError:' int'对象不可订阅"

我尝试了很多关键/ cmp /排序/排序变化而没有成功。 我该怎么办?

1 个答案:

答案 0 :(得分:0)

假设内部列表的长度相等:

r = sorted(list(zip(*results_struct)), key=lambda o: o[4][0])

此处list(zip(*results_struct))如下所示:

[
    (14, 32, 19, 51, (32, 25), 'ilya'),
    # and so on
]

然后,o代表一行,o[4]是它的第四个元素,它似乎是一个元组,它是完全可订阅的。

如果您使用的是Python 2.x,则可以安全地省略list