gpt4 book ai didi

python - 这种方法是否有更快的替代方法来从字典列表中获取最后更新消息?

转载 作者:太空宇宙 更新时间:2023-11-04 01:55:25 25 4
gpt4 key购买 nike

我需要从数据流中获取最后的更新消息。数据是这样的:

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 万个列表项。上述解决方案需要很长时间,我想知道是否有更快的方法。

最佳答案

您应该能够通过单个比较将其作为单个循环来执行。在您继续循环时,只需跟踪到目前为止看到的每个类别的最大值:

from collections import defaultdict

def getMax(test_data):
d = defaultdict(lambda: {'timestamp':0})

for item in test_data:
if int(item['timestamp']) > int(d[item['entity']]['timestamp']):
d[item['entity']] = item
return d

返回值将是一个键控到 entity 的字典,每个实体都有最大值。在循环中排序或构建数组应该快得多。 700 万还需要一段时间。

关于python - 这种方法是否有更快的替代方法来从字典列表中获取最后更新消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56923134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com