多维度排序 [Python]

2024-06-02 14:12:55 发布

您现在位置:Python中文网/ 问答频道 /正文

结构如下:

            #  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中的位置”对结构排序:单元格[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'对象不可下标

我尝试了许多key/cmp/sorted/sort变体,但都没有成功。 我该怎么办?你知道吗


Tags: keypositionplus结构pasfile1resultsstruct
1条回答
网友
1楼 · 发布于 2024-06-02 14:12:55

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

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]是它的第四个元素,看起来是一个元组,它是完全可下标的。你知道吗


如果您使用的是python2.x,那么可以安全地省略list。你知道吗

相关问题 更多 >