将列表中的多个项目分组为多个不同大小的组 python

grouping multiple items in list into multiple groups of different size python

我正在尝试根据 .xls 文件名中的字符串对列表 infiles 中的 .xls 文件进行分组。

文件名格式如下“type_d_cross_profile_glacier_name_A-Z” 其中type_d是一种冰川环境,glacier_name是每条冰川,A-Z是冰川环境的字母表示它是哪个剖面的字母表(每种冰川都有多个剖面,并不总是有 26 个剖面)。

我想先按类型(type_atype_d)对文件进行分组,然后按冰川名称对文件进行分组,以便每个冰川的交叉剖面的 A-Z 都分组在一起。我想我必须使用 groupby,但我不知道如何将 key, group 方面与我想要分组的两个不同字符串一起使用。

我使用了长手版来对类型进行分组:

type_a = [a for a in infiles if "type_a" in a]
type_b = [b for b in infiles if "type_b" in b]
type_c = [c for c in infiles if "type_c" in c]
type_d = [d for d in infiles if "type_d" in d]

效果很好,但我确信有一种更优雅的方法可以按类型分组,然后按冰川分组。 p.s。 (我是 python 的新手并且患有多动症,所以发现多层次的东西对我来说真的很难理解;非常感谢任何帮助!)

使用字典。

types = {}

for f in infiles:
    prefix = '_'.join(f.split('_', 2)[:2]) # could also use regex
    types.setdefault(prefix, []).append(f)