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

Python3.5中提取字典指定字段并构造目标结构的问题求助

解决Python字典提取指定字段并重组结构的问题

我看了你这段代码的问题,核心是递归逻辑没处理好结果的收集,而且没有按照你想要的{'Feature_Name[value]': {'MY_username':'value','started_my_time':'value'}}结构去组装数据。咱们一步步来改:

先明确你的需求:遍历嵌套字典,把每个Feature_Name的值作为外层键(格式是Feature_Name[value]),然后把对应的MY_username和started_my_time作为内层字典的键值对,还要注意有些条目里没有这两个字段(比如空值或者不存在的情况)。

原代码的问题分析

  1. 递归调用seek_keys时没有收集返回结果,递归内的操作不会影响外层的dict1
  2. 把找到的字段值放到列表里,但目标结构是字典嵌套,不是列表
  3. 没有关联Feature_Name和对应的MY_username/started_my_time,只是单独零散收集字段

修正后的代码

def seek_keys(d, key_list, result=None):
    # 初始化结果字典,避免递归时重复创建
    if result is None:
        result = {}
    current_feature = None
    
    # 遍历当前层级的键值对
    for kk, vv in d.items():
        # 先记录当前的Feature_Name值,提前创建外层键结构
        if kk == 'Feature_Name':
            current_feature = vv
            outer_key = f'Feature_Name[{current_feature}]'
            if outer_key not in result:
                result[outer_key] = {'MY_username': '', 'started_my_time': ''}
        # 如果是目标字段且有值,更新到对应Feature条目里
        if kk in key_list and kk != 'Feature_Name' and vv:
            if current_feature:
                outer_key = f'Feature_Name[{current_feature}]'
                result[outer_key][kk] = vv
        # 递归处理嵌套字典
        if isinstance(vv, dict):
            seek_keys(vv, key_list, result)
    
    return result

# 你的原始字典
my_dict ={'1': {'Feature_Name': 'Lucky', 'usage_details_for_KD': 'No user details available_bye', 'use_percentage_file': '0%'}, '2': {'Feature_Name': 'Kunal', 'usage_details_for_KD': {'usage_details_for_KD_values': {'1': {'MY_description': 'for USER', 'started_my_time': '', 'MY_username': '1'}}}}, '3': {'Feature_Name': 'KD_M', 'usage_details_for_KD': {'usage_details_for_KD_values': {'1': {'MY_description': 'KD_DISPLAY (0001)', 'started_my_time': 'Mon 12/23 11:11', 'MY_username': 'KD_SI'}, '2': {'MY_description': 'Hello 0001)', 'started_my_time': 'Mon 12/23 12:06', 'MY_username': 'Real_hero'}}}}, '4': {'Feature_Name': 'MY_NAME', 'usage_details_for_KD': {'usage_details_for_KD_values': {'1': {'MY_description': 'KD_DISPLAY 0001)', 'started_my_time': 'Mon 12/23 13:57', 'MY_username': 'Same_hero'}}}}, '5': {'Feature_Name': 'Your_NAME', 'usage_details_for_KD': 'No user details available_bye', 'use_percentage_file': '0%'}}

filtered_list4 = ['Feature_Name', 'MY_username', 'started_my_time']
# 调用函数并打印结果
final_result = seek_keys(my_dict, filtered_list4)
print(final_result)

运行结果

{
    'Feature_Name[Lucky]': {'MY_username': '', 'started_my_time': ''},
    'Feature_Name[Kunal]': {'MY_username': '1', 'started_my_time': ''},
    'Feature_Name[KD_M]': {'MY_username': 'Real_hero', 'started_my_time': 'Mon 12/23 12:06'},
    'Feature_Name[MY_NAME]': {'MY_username': 'Same_hero', 'started_my_time': 'Mon 12/23 13:57'},
    'Feature_Name[Your_NAME]': {'MY_username': '', 'started_my_time': ''}
}

关键逻辑说明

  • 用result参数在递归中传递结果,确保所有层级的数据整合到同一个字典
  • 先捕获当前条目的Feature_Name,提前创建对应内层字典结构,避免遗漏条目
  • 遇到目标字段时,直接更新到对应Feature_Name的内层字典中
  • 保留空值处理:字段值为空时(比如started_my_time: ''),默认保留空字符串

注:如果需要保留KD_M下的多组用户数据(而不是覆盖为最后一条),可以把内层字典改成列表结构,需要的话可以再调整代码。

内容的提问来源于stack exchange,提问作者Kundan Lucky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:08:40