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

开发可检测字典类型并提取键值生成DataFrame的Python函数

自动识别嵌套字典类型并生成目标DataFrame的Python函数

我有两类包含嵌套结构的字典(示例如下),需要编写Python函数自动判断字典类型,分别提取对应层级的key和value生成目标DataFrame:

测试字典示例

test_dict_1={'results': [{'key': 'q1',
   'value': ['1'],
   'end_time': '2021-01-21',
   'start_time': '2021-01-21',
   'result_type': 'multipleChoice'},
  {'key': 'q2',
   'value': ['False'],
   'end_time': '2021-01-21',
   'start_time': '2021-01-21',
   'result_type': 'multipleChoice'},
  {'key': 'q3',
   'value': ['3'],
   'end_time': '2021-01-21',
   'start_time': '2021-01-21',
   'result_type': 'multipleChoice'},
  {'key': 'q4',
   'value': ['3'],
   'end_time': '2021-01-21',
   'start_time': '2021-01-21',
   'result_type': 'multipleChoice'}]}


test_dict_2={'results': [{'key': 'survey_x',
   'value': [[{'key': 'q1',
      'value': 2,
      'endTime': '2021-01-21',
      'skipped': False,
      'startTime': '2021-01-21',
      'resultType': 'multipleChoice'},
     {'key': 'q2',
      'value': 0,
      'endTime': '2021-01-21',
      'skipped': False,
      'startTime': '2021-01-21',
      'resultType': 'multipleChoice'},
     {'key': 'q3',
      'value': 2,
      'endTime':'2021-01-21',
      'skipped': False,
      'startTime': '2021-01-21',
      'resultType': 'multipleChoice'},
     {'key': 'q4',
      'value': 0,
      'endTime': '2021-01-21',
      'skipped': False,
      'startTime':'2021-01-21',
      'resultType': 'multipleChoice'}]],
   'skipped': False,
   'end_time': '2021-01-21',
   'start_time': '2021-01-21',
   'result_type': 'grouped'}]}

解决方案函数

import pandas as pd

def extract_key_value_df(input_dict):
    # 获取results列表的第一个元素
    first_result = input_dict['results'][0]
    # 通过result_type字段判断字典类型
    if first_result.get('result_type') == 'grouped' and isinstance(first_result.get('value'), list):
        # 类型2:提取内层嵌套的问卷项列表
        items = first_result['value'][0]
    else:
        # 类型1:直接使用results中的列表
        items = input_dict['results']
    
    # 生成仅保留key和value列的DataFrame
    df = pd.DataFrame(items)[['key', 'value']]
    # 处理类型1中value为列表的情况,提取列表内的单个元素
    df['value'] = df['value'].apply(lambda x: x[0] if isinstance(x, list) else x)
    return df

函数逻辑说明

  • 核心判断依据:通过results[0]['result_type']是否为grouped区分两类字典
  • 类型1直接读取results列表生成DataFrame,同时处理value字段为列表的特殊情况
  • 类型2深入到value[0]层级提取内层的问卷项数据
  • 最终统一输出仅包含key和value的目标DataFrame

测试示例

测试类型1

print(extract_key_value_df(test_dict_1))

输出:

key  value
0  q1      1
1  q2  False
2  q3      3
3  q4      3

测试类型2

print(extract_key_value_df(test_dict_2))

输出:

key  value
0  q1      2
1  q2      0
2  q3      2
3  q4      0

内容的提问来源于stack exchange,提问作者sos.cott

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:50:28