我有一个字典列表如下:
listofdicts = [{'Time':2015-03-14 11:54:00, 'Value':'Some Value'},
{'Time':2015-03-14 13:23:00, 'Value':'Another Value'},
{'Time':2015-03-14 12:52:00, 'Value':'Some Value'}, ...]
我想在列表中搜索具有以下条件的词典: 寻找三个或更多的字典,它们的值对值相同,时间值之间的间隔在10分钟之内。我希望这个算法在每个字典中创建一个匹配这个条件的新键,并将其标记为匹配。在
^{pr2}$我已经创建了一个算法来实现这一点,但它并不是特别有效或可伸缩的。有没有人能就如何使之更好或研究领域提供任何建议?在
当前算法:
for dict in listofdicts:
matchingdicts = []
for dict2 in listofdicts:
if dict['Value']==dict2['Value']:
matchingdicts.append(dict2)
listoftimeintervals =
[[dict['Time'] - datetime.timedelta(minutes=10),dict['Time']],
[dict['Time'] - datetime.timedelta(minutes=9),dict['Time'] + datetime.timedelta(minutes=1)],
...,
[dict['Time'],dict['Time'] + datetime.timedelta(minutes=10)]]
for time in listoftimeintervals:
dictsintimerange = []
for matchingdict in matchingdicts:
if time[0]<=matchingdict['Time']<=time[1]:
dictsintimerange.append(matchingdict)
if len(dictsintimerange)>=3:
for eachdict in dictsintimerange:
eachdict['Matching']=='True'
首先对列表进行排序,然后按顺序扫描,在10分钟内查找项目。 大致:
对于排序,这应该是O(N lg N),对于比较,应该是O(N)
(注意:我甚至没有用解释器运行过这段代码。)
首先按值对dicts进行分区。在
然后按时间对每个列表进行排序并扫描。在
^{pr2}$相关问题 更多 >
编程相关推荐