У меня есть группа элементов, которые помечены как item_labels = [('a', 3), ('b', 2), ('c', 1), ('d', 3), ('e', 2), ('f', 3)]
Python сортировки списка по размеру группы
Я хочу, чтобы отсортировать их по размеру группы. например, метка 3 имеет размер 3, а этикетка 2 имеет размер 2 в приведенном выше примере.
Я пробовал использовать комбинацию groupby
и sorted
, но не работал.
In [162]: sil = sorted(item_labels, key=op.itemgetter(1))
In [163]: sil
Out[163]: [('c', 1), ('b', 2), ('e', 2), ('a', 3), ('d', 3), ('f', 3)]
In [164]: g = itt.groupby(sil,)
Display all 465 possibilities? (y or n)
In [164]: g = itt.groupby(sil, key=op.itemgetter(1))
In [165]: for k, v in g:
.....: print k, list(v)
.....:
.....:
1 [('c', 1)]
2 [('b', 2), ('e', 2)]
3 [('a', 3), ('d', 3), ('f', 3)]
In [166]: sg = sorted(g, key=lambda x: len(list(x[1])))
In [167]: sg
Out[167]: [] # not exactly know why I got an empty list here
Я всегда могу написать какой-нибудь утомительный цикл для этого, но я бы скорее нашел что-то более элегантное. Любое предложение? Если есть библиотеки, которые мне полезны, я с удовольствием буду их использовать. например, pandas
, scipy
К сожалению, я использую python 2.6, поэтому не могу использовать 'Counter'. – clwen
Спасибо. Эта строка 'item_labels.sort (key = lambda t: c [t [0]])' должна быть 'item_labels.sort (key = lambda t: c [t [1]])'? – clwen
@clwen да, это опечатка. – Elazar