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

如何将指定格式的Python列表转换为键值分组的字典?

问题描述

给定如下Python列表:

['1 184',
 '1 29',
 '1 31',
 '1 12',
 '1 51',
 '1 102',
 '1 13',
 '1 14',
 '1 15',
 '1 57',
 '1 378',
 '1 859',
 '1 185',
 '1 30',
 '1 37',
 '1 52',
 '1 142',
 '1 195',
 '1 875',
 '1 56',
 '1 66',
 '1 95',
 '1 462',
 '1 497',
 '1 858',
 '1 876',
 '1 879',
 '1 880',
 '2 12',
 '2 15',
 '2 184',
 '2 858',
 '2 51']

需要将每个字符串中的第一个元素作为字典的键,后续元素作为对应键的列表值,最终得到类似 {1 : [184, 29, 31...], 2 : [12, 15, 18, ...]} 的字典,该如何实现?

解决方案

方法一:基础循环实现

这是最直观的写法,手动判断键是否存在并初始化列表:

original_list = ['1 184', '1 29', '1 31', '1 12', '1 51', '1 102', '1 13', '1 14', '1 15', '1 57', '1 378', '1 859', '1 185', '1 30', '1 37', '1 52', '1 142', '1 195', '1 875', '1 56', '1 66', '1 95', '1 462', '1 497', '1 858', '1 876', '1 879', '1 880', '2 12', '2 15', '2 184', '2 858', '2 51']
result = {}

for item in original_list:
    # 分割字符串并转换为整数类型
    key_str, value_str = item.split()
    key = int(key_str)
    value = int(value_str)
    
    # 若键不存在则初始化空列表
    if key not in result:
        result[key] = []
    result[key].append(value)

print(result)

方法二:使用collections.defaultdict简化代码

利用defaultdict自动为不存在的键创建默认空列表,省去判断步骤:

from collections import defaultdict

original_list = ['1 184', '1 29', '1 31', '1 12', '1 51', '1 102', '1 13', '1 14', '1 15', '1 57', '1 378', '1 859', '1 185', '1 30', '1 37', '1 52', '1 142', '1 195', '1 875', '1 56', '1 66', '1 95', '1 462', '1 497', '1 858', '1 876', '1 879', '1 880', '2 12', '2 15', '2 184', '2 858', '2 51']
result = defaultdict(list)

for item in original_list:
    # 一次性完成分割和类型转换
    key, value = map(int, item.split())
    result[key].append(value)

# 可选:将defaultdict转换为普通字典
result = dict(result)

print(result)

方法三:使用dict.setdefault一行完成判断与添加

setdefault方法会返回对应键的列表(不存在则创建空列表),直接链式调用append:

original_list = ['1 184', '1 29', '1 31', '1 12', '1 51', '1 102', '1 13', '1 14', '1 15', '1 57', '1 378', '1 859', '1 185', '1 30', '1 37', '1 52', '1 142', '1 195', '1 875', '1 56', '1 66', '1 95', '1 462', '1 497', '1 858', '1 876', '1 879', '1 880', '2 12', '2 15', '2 184', '2 858', '2 51']
result = {}

for item in original_list:
    key, value = map(int, item.split())
    result.setdefault(key, []).append(value)

print(result)

内容的提问来源于stack exchange,提问作者Hefe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:06:26