如何将指定格式的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
相关产品推荐
相关产品推荐

