【发布时间】:2020-06-14 14:17:53
【问题描述】:
下面是一个示例列表,其中每个元素都有一个名称(例如XXX)和关联的日期(例如20200115)
[XXX_20200115, XXX_20200116, YYY_20200116, ZZZ_20200116, ZZZ_20200117]
我想从列表中删除所有同名但日期较旧的元素。例如,我想删除XXX_20200115,因为XXX_20200116 已经存在且日期最近。
所以我的最终输出应该是:
[ XXX_20200116, YYY_20200116, ZZZ_20200117]
直到现在我写了这段代码:
from collections import defaultdict
def list_duplicates(seq):
tally = defaultdict(list)
for i,item in enumerate(seq):
tally[item].append(i)
return ((key,locs) for key,locs in tally.items()
if len(locs)>1)
def filterModules(mylist):
names = []
timestamps = []
for module in mylist:
splittedName = module.rsplit('_', 1)
names.append(splittedName[0])
timestamps.append(splittedName[1])
duplicates = []
for dup in sorted(list_duplicates(names)):
duplicate = {}
duplicate['name'] = dup[0]
duplicate['indexs'] = dup[1]
duplicates.append(duplicate)
这给了我与他们的索引重复。
我的问题是,我的目标是为这个问题编写最少的代码,但我的代码越来越大,而且似乎我正在以低效的方式解决这个问题。有人能告诉我用最少的代码解决这个问题的更优化方法吗?
【问题讨论】:
标签: python python-3.x list date filter