我有下面的列表,我想根据文本的'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))])但我得到了一个混乱的结果,一点也不像我预期的那样。欢迎任何想法!
发布于 2021-02-24 08:35:06
您需要将输入排序到groupby,否则这些组将被其他组分隔(这与bash中的sort和uniq的工作方式相同)。此外,您的key=函数需要处理以"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))https://stackoverflow.com/questions/66342920
复制相似问题