下面是一个示例列表,其中每个元素都有一个名称(例如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)
这给了我重复的索引
我的问题是,我的目标是为这个问题编写最少的代码,但我的代码越来越大,似乎我正在以低效的方式处理这个问题。有人能告诉我用最少的代码解决这个问题的最佳方法吗
我尝试使用字典来实现这个目的,其中
XXX
、YYY
等可以是键,值可以是日期。这就是实现的样子这将给
最后,如果要转换为原始格式,只需附加键和值,并使其成为具有
这将给
首先根据前3个字母和子列表对元素进行分组
max()
。如果是字符串,python将根据整数取max:相关问题 更多 >
编程相关推荐