Часто приходится работать со списками, элементами которых являются либо другие списки, либо tuple. В процессе работы необходимо производить анализ и выбрать определенные записи. Например, есть список:
data = [ ('data1', 'id1', 3256),
('data2', 'id2', 809),
('data3', 'id3', 1284),
('data1', 'id4', 3107),
('data3', 'id5', 2751),
('data2', 'id6', 452), ]
Первый элемент tuple может повторяться в разных элементах списка, второй — уникален для каждого элемента. Необходимо выбрать все возможные записи по первому элементу tuple, но так, чтобы третий элемент tuple был максимальным. Т.е. для примера выше в результате должно получиться
uniq = [ ('data1', 'id1', 3256),
('data2', 'id2', 809),
('data3', 'id3', 2751)]
Сейчас использую вот такой подход
unique = dict()
for r in data:
if r[ 0 ][ 0 ] not in unique:
unique[ r[ 0 ][ 0 ] ] = [ r[ 1 ], r[ 2 ] ]
else:
if unique[ r[ 0 ][ 0 ] ][ 1 ] < r[ 2 ]:
unique[ r[ 0 ][ 0 ] ] = [ r[ 1 ], r[ 2 ] ]
Инетресно, если ли более изящное решение? Может есть какие-то более Python-специфичные методы для решения этой и подобных задач и что почитать по этой теме?