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

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处理这类索引匹配、缺失值填充的需求非常高效,步骤如下:

  1. 将字典转换为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)
    
  2. 合并所有DataFrame并填充缺失值
    用pd.concat按索引合并所有DataFrame,缺失值自动填充为None:

    merged_df = pd.concat(dfs, axis=1).fillna("None")
    
  3. 转换为目标格式输出
    将合并后的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:01:28