Мне нужно получить последнее сообщение об обновлении из потока данных. Данные поступают так:
test_data =
[{u'category': u'3',
u'entity': u'entityA',
u'length': u'0',
u'timestamp': u'1562422690'},
{u'category': u'3',
u'entity': u'entityA',
u'length': u'1',
u'timestamp': u'1562422680'},
{u'category': u'3',
u'entity': u'entityB',
u'length': u'2',
u'timestamp': u'1562422691'},
{u'category': u'3',
u'entity': u'entityB',
u'length': u'3',
u'timestamp': u'1562422688'},
{u'category': u'3',
u'entity': u'entityC',
u'length': u'4',
u'timestamp': u'1562422630'},
{u'category': u'3',
u'entity': u'entityC',
u'length': u'5',
u'timestamp': u'1562422645'},
{u'category': u'3',
u'entity': u'entityD',
u'length': u'6',
u'timestamp': u'1562422645'}]
Был предложен следующий подход здесь
test_alexander = {entity: sorted([d for d in test_data if d.get('entity') == entity], key=lambda x: x['timestamp'])[-1]
for entity in set(d.get('entity') for d in test_data)}
, который возвращает это (работает точно так, как задумано):
{u'entityA': {u'category': u'3',
u'entity': u'entityA',
u'length': u'0',
u'timestamp': u'1562422690'},
u'entityB': {u'category': u'3',
u'entity': u'entityB',
u'length': u'2',
u'timestamp': u'1562422691'},
u'entityC': {u'category': u'3',
u'entity': u'entityC',
u'length': u'5',
u'timestamp': u'1562422645'},
u'entityD': {u'category': u'3',
u'entity': u'entityD',
u'length': u'6',
u'timestamp': u'1562422645'}}
Проблема в том, что у меня 7k уникальных "сущностей" и целых 7 миллионов элементов списка в "test_data". Приведенное выше решение занимает много времени, и мне интересно, есть ли более быстрый подход.