You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 13:55:15