Python中高效将list[list[str]]转为字典或键值列表的最优方法
用Python高效处理键值对列表:生成字典或分拆键/值列表
对于给定的list[list[str]]类型的键值对列表,下面是几种最符合Python风格且高效的处理方式:
一、生成聚合值的字典
方法1:使用collections.defaultdict(最推荐)
这是处理这类分组场景最直观且高效的方式,defaultdict会自动为不存在的键初始化空列表,省去手动判断的步骤:
from collections import defaultdict input_list = [["key_1", "value_1"], ["key_1", "value_2"], ["key_1", "value_3"], ["key_1", "value_4"], ["key_2", "value_5"], ["key_2", "value_6"]] result_dict = defaultdict(list) for key, val in input_list: result_dict[key].append(val) # 可选:转为普通字典 result_dict = dict(result_dict)
输出结果:
{"key_1": ["value_1", "value_2", "value_3", "value_4"], "key_2": ["value_5", "value_6"]}
方法2:使用普通字典的setdefault方法
如果不想引入额外模块,用原生字典的setdefault也能实现,逻辑和defaultdict类似:
input_list = [["key_1", "value_1"], ["key_1", "value_2"], ["key_1", "value_3"], ["key_1", "value_4"], ["key_2", "value_5"], ["key_2", "value_6"]] result_dict = {} for key, val in input_list: result_dict.setdefault(key, []).append(val)
二、生成分离的键列表和值列表
如果需要得到[[key1, key2], [values_list1, values_list2]]的格式,可以先生成字典,再拆分键和值:
from collections import defaultdict input_list = [["key_1", "value_1"], ["key_1", "value_2"], ["key_1", "value_3"], ["key_1", "value_4"], ["key_2", "value_5"], ["key_2", "value_6"]] # 先构建聚合字典 result_dict = defaultdict(list) for key, val in input_list: result_dict[key].append(val) # 拆分得到目标结构 keys = list(result_dict.keys()) values = list(result_dict.values()) result = [keys, values]
输出结果:
[["key_1", "key_2"], [["value_1", "value_2", "value_3", "value_4"], ["value_5", "value_6"]]]
性能说明
两种方法的时间复杂度都是O(n)(n为输入列表长度),属于最优复杂度。其中defaultdict在处理大量数据时,比setdefault略高效,因为它不需要每次调用方法判断键是否存在。
内容的提问来源于stack exchange,提问作者Daniel White
相关产品推荐
相关产品推荐

