开发可检测字典类型并提取键值生成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
相关产品推荐
相关产品推荐

