这是结构:
# 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 /排序/排序变化而没有成功。 我该怎么办?
答案 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
。