группировка нескольких элементов в списке в несколько групп разного размера 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)