【发布时间】:2019-07-07 14:42:05
【问题描述】:
我需要从数据流中获取最后一条更新消息。数据是这样的:
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'}]
建议使用以下方法here
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 个唯一的“实体”,并且“test_data”中有多达 700 万个列表项。上述解决方案需要很长时间,我想知道是否有更快的方法。
【问题讨论】:
标签: python json python-2.7 performance dictionary