根据项目的公共切片文本对列表项目进行分组



我有下面的列表,我想根据文本的'2020.0x'切片进行分组。

mylist = ['c-2020.09.25.tif', 'c-.2020.09.12.masked.tif', 'c-.2020.09.13.masked.tif', 'c-.2020.09.26.masked.tif', 'c-.2020.08.11.masked.tif', 'c-.2020.07.24.masked.tif', 'c-.2020.07.16.masked.tif', 'c-.2020.07.09.masked.tif', 'c-.2020.08.21.masked.tif', 'c-.2020.8.09.masked']

到目前为止我所做的是:

import itertools
key = lambda x: x[2:9] 

for key, group in itertools.groupby(mylist, key):
print([str(list(group))])

但是我得到了一个混乱的结果,一点也不像我期望的那样。任何想法都是欢迎的!

您需要将输入排序为groupby,否则组将被其他组分开(这与bash中的sortuniq的工作方式相同)。此外,key=函数需要处理以&quot开头的文件名。c-.";和";c-";

import itertools
def get_year_and_month(filename):
year, month, day, *rest = filename.split('-')[1].lstrip('.').split('.')
return int(year), int(month)  # convert to int to handle missing leading 0

mylist = sorted(mylist, key=get_year_and_month)
for key, group in itertools.groupby(mylist, key=get_year_and_month):
print(list(group))