Python:按数字分组列表元素创建字典的更高效实现方法
问题描述
给定如下Python列表:
master_list = ['a_1', 'b_4', 'd_2', 'c_3', 'a_2', 'c_1', 'd_4', 'b_3', 'd_3', 'c_2', 'a_4', 'b_1', 'c_4', 'a_3', 'b_1', 'd_1']
列表中每个元素由字母、下划线和数字组成,需要将这些元素按数字分组到如下字典中:
my_dict = {'1': [], '2': [], '3': [], '4':[]}
目前使用的填充代码较为繁琐:
for item in master_list: if '_1' in item: my_dict['1'].append(item) elif '_2' in item: my_dict['2'].append(item) elif '_3' in item: my_dict['3'].append(item) elif '_4' in item: my_dict['4'].append(item)
请问有没有更高效的实现方式?
高效实现方式
方法1:提取分组键简化逻辑
直接通过下划线分割字符串获取数字部分作为字典键,替代冗余的条件判断:
for item in master_list: key = item.split('_')[1] my_dict[key].append(item)
这种写法不仅简洁,还能兼容数字位数变化的场景(比如后续出现x_10这类元素),扩展性更好。
方法2:用collections.defaultdict自动初始化列表
如果不需要提前手动创建包含'1'到'4'的字典结构,可以用defaultdict自动处理空列表的初始化,减少前置代码:
from collections import defaultdict my_dict = defaultdict(list) for item in master_list: key = item.split('_')[1] my_dict[key].append(item) # 若需要确保字典包含1-4所有键(即使对应分组无元素),可转为普通字典 my_dict = {str(i): my_dict.get(str(i), []) for i in range(1, 5)}
方法3:字典推导式一次性生成
如果分组键固定为1-4,用字典推导式结合列表推导可以一次性生成目标字典,代码更紧凑:
my_dict = { str(num): [item for item in master_list if item.endswith(f'_{num}')] for num in range(1, 5) }
内容的提问来源于stack exchange,提问作者gwydion93
相关产品推荐
相关产品推荐

