Есть ли лучший способ сортировки списка по вложенным значениям кортежа, чем написание альтернативы 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), а значение - количество.В конце пункты должны быть отсортированы по количеству по убыванию, а и б.Альтернатива состоит в том, чтобы сгладить кортеж и напрямую использовать элементный виджет, но таким образом будет создано много кортежей.