Ниже приведен пример списка, в котором каждый элемент имеет имя (например, 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)
, что дает мне дубликаты с их индексами.
Моя проблема в том, что я пытался написать минимальный код для этой проблемы, но мой код становится больше, и мне кажется, что я подхожу к этой проблеме неэффективно. Может кто-нибудь сказать мне более оптимальный способ решения этой проблемы и с минимальным кодом?