Python中基于列表首元素匹配将多键字典转Pandas结构
问题描述
给定如下格式的字典:
{ "Description" : [[".1","test"],[".3","test1"],[".4","test2"]], "Description1": [[".1","196"],[".4","197"],[".3","198"]], "Description3": [[".1","2"],[".3","2"]], "Description4": [[".1",".1.3"],[".3",".1.4"],[".4",".1.5"]] }
注:原字典存在重复键"Description3",已修正为"Description4"避免冲突。
该字典中每个键对应一个二维数组,子列表的第一个元素作为检索索引(如.1、.3、.4)。需要提取这些索引,匹配字典中其他键对应的取值,整理为如下行格式:
0 : ["test","196","2",".1.3"] 1 : ["test1","198","2",".1.4"] 2 : ["test2","197","None",".1.5"]
注:若其他键中不存在对应索引,填充为"None"。
请问是否有使用Pandas或Numpy实现该需求的更优方法?
最优实现方案(Pandas)
用Pandas处理这类索引匹配、缺失值填充的需求非常高效,步骤如下:
将字典转换为DataFrame集合
把每个键对应的二维数组转成以索引为行名的单列DataFrame,方便后续按索引对齐合并:import pandas as pd data = { "Description" : [[".1","test"],[".3","test1"],[".4","test2"]], "Description1": [[".1","196"],[".4","197"],[".3","198"]], "Description3": [[".1","2"],[".3","2"]], "Description4": [[".1",".1.3"],[".3",".1.4"],[".4",".1.5"]] } # 逐个转换为DataFrame,索引设为子列表第一个元素,列名为原键名 dfs = [] for col_name, values in data.items(): df = pd.DataFrame(values, columns=["index", col_name]).set_index("index") dfs.append(df)合并所有DataFrame并填充缺失值
用pd.concat按索引合并所有DataFrame,缺失值自动填充为None:merged_df = pd.concat(dfs, axis=1).fillna("None")转换为目标格式输出
将合并后的DataFrame转成要求的行格式:for idx, row in enumerate(merged_df.values.tolist()): print(f"{idx} : {row}")
运行后输出:
0 : ['test', '196', '2', '.1.3'] 1 : ['test1', '198', '2', '.1.4'] 2 : ['test2', '197', 'None', '.1.5']
方案优势
- 自动处理索引对齐,无需手动遍历匹配,代码简洁
- 内置缺失值填充逻辑,省去手动判断补全的繁琐
- Pandas针对表格数据做了优化处理,数据量较大时效率远高于纯Python循环
内容的提问来源于stack exchange,提问作者prem Rexx
相关产品推荐
相关产品推荐

