группировка нескольких элементов в списке в несколько групп разного размера python

Я пытаюсь сгруппировать файлы .xls в список infilesна основе строк в именах файлов .xls.

Имена файлов имеют такой формат: «type_d_cross_profile_glacier_name_A-Z», где — тип ледниковой среды, glacier_name- это каждый ледник, а AZ - это буква алфавита, обозначающая, какой это поперечный профиль (их несколько для каждого ледника в каждом типе, и не всегда 26 поперечных профилей).

Я хотел бы сначала сгруппировать файлы по типу ( type_aк type_d), а затем по названию ледника, чтобы все AZ поперечных профилей для каждого ледника были сгруппированы вместе. я думаю, что я должен использовать 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]

который отлично работал, но я уверен, что есть более элегантный способ группировки по типу, а затем по леднику. ps (я относительно новичок в python и имею adhd, поэтому найти многоуровневые вещи мне действительно сложно понять; я очень ценю любую помощь!)

1 ответ

Используйте дикт.

      types = {}

for f in infiles:
    prefix = '_'.join(f.split('_', 2)[:2]) # could also use regex
    types.setdefault(prefix, []).append(f)
   
Другие вопросы по тегам