将列表中的多个项目分组为多个不同大小的组 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_a
到 type_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)
我正在尝试根据 .xls 文件名中的字符串对列表 infiles
中的 .xls 文件进行分组。
文件名格式如下“type_d_cross_profile_glacier_name_A-Z” 其中type_d
是一种冰川环境,glacier_name
是每条冰川,A-Z是冰川环境的字母表示它是哪个剖面的字母表(每种冰川都有多个剖面,并不总是有 26 个剖面)。
我想先按类型(type_a
到 type_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)