Есть ли лучший способ отсортировать список по значениям вложенного кортежа, чем писать альтернативу itemgetter, извлекающую значение вложенного кортежа:
def deep_get(*idx):
def g(t):
for i in idx: t = t[i]
return t
return g
>>> l = [((2,1), 1),((1,3), 1),((3,6), 1),((4,5), 2)]
>>> sorted(l, key=deep_get(0,0))
[((1, 3), 1), ((2, 1), 1), ((3, 6), 1), ((4, 5), 2)]
>>> sorted(l, key=deep_get(0,1))
[((2, 1), 1), ((1, 3), 1), ((4, 5), 2), ((3, 6), 1)]
Я думал об использовании compose, но его нет в стандартной библиотеке:
sorted(l, key=compose(itemgetter(1), itemgetter(0))
Есть ли что-то, что я упустил в библиотеках, что могло бы сделать этот код лучше?
Реализация должна разумно работать с 100 тыс. Элементов.
Контекст: я хотел бы отсортировать словарь элементов, представляющих собой гистограмму. Ключи - это кортежи (a, b), а значение - это количество. В конце элементы следует отсортировать по убыванию количества, a и b. Альтернативой является сглаживание кортежа и прямое использование itemgetter, но в этом случае будет сгенерировано много кортежей.