Nested_Dict =
{'candela_samples_generic': {'drc_dtcs': {'domain_name': 'TEMPLATE-DOMAIN', 'dtc_all':{ 
'0x930001': {'identification': {'udsDtcValue': '0x9300', 'FaultType': '0x11', 'description': 'GNSS antenna short to ground'}, 
'functional_conditions': {'failure_name': 'short_to_ground', 'mnemonic': 'DTC_GNSS_Antenna_Short_to_ground'}},
'0x212021': {'identification': {'udsDtcValue': '0x2120', 'FaultType': '0x21', 'description': 'ECU internal Failure'},
'functional_conditions': {'failure_name': 'short_to_ground', 'mnemonic': 'DTC_GNSS_Antenna_Short_to_ground'}}}}}}
Header = {
    'dtc_all': {
        'DiagnosticTroubleCodeUds': {'udsDtcValue': None, 'FaultType': None},
        'dtcProps': {'description': None},
        'DiagnosticTroubleCodeObd': {'failure_name': None}   
    }
}
SubkeyList = ['0x930001','0x240001']

从SubkeyList中取一个元素,从字典中取一个头键(可以有多个头键,比如dtc_all). 在头字典中迭代字典的值,例如'udsDtcValue'.

For example:
    Main_Key = dtc_all
    Sub_Key = 0x212021
    Element = udsDtcValue

将这些参数传递给函数get_value_nested_dict(nested_dict,Main_Key,Sub_Key,Element).这个函数将返回元素的值. get_value_nested_dict func,它与我发布的元素值检索预期一样工作. 同时,创建一个新字典,并在正确的位置更新元素值,例如'udsDtcValue':'0x9300 '. 此外,确保键的序列与标头中的相同. 类似地,在头字典内遍历字典的所有值,如FaultType、Description,直到failure_name. 对SubkeyList中的每个元素重复这些迭代,并以相同的顺序将结果附加到new_dict中. 有什么建议吗?

输出:New_Dict应该是这样的:

New_Dict= 
{'dtc_all': 
{'0x930001': {'DiagnosticTroubleCodeUds': {'udsDtcValue': '0x9300', 'FaultType': '0x11'}, 'dtcProps':{'description': 'GNSS antenna short to ground'}, 'DiagnosticTroubleCodeObd': {'failure_name':short_to_ground}}},
{'0x212021': {'DiagnosticTroubleCodeUds': {'udsDtcValue': '0x2120', 'FaultType': '0x21'}, 'dtcProps':{'description': 'ECU internal Failure'}, 'DiagnosticTroubleCodeObd': {'failure_name':short_to_ground}}}}

def get_value_nested_dict(nested_dict, main_key, sub_key, element):
    results = []
    def search_for_element(sub_dict, looking_for_element):
        if isinstance(sub_dict, dict):
            for k, v in sub_dict.items():
                if k == element and looking_for_element:
                    results.append(v)
                else:
                    search_for_element(v, looking_for_element)
    def search_nested_dict(current_dict):
        if isinstance(current_dict, dict):
            for key, value in current_dict.items():
                if key == main_key:
                    if sub_key in value:
                        search_for_element(value[sub_key], True)
                    else:
                        search_for_element(value, False)
                else:
                    search_nested_dict(value)
    search_nested_dict(nested_dict)
    return results

推荐答案

  1. 初始化空字典new_dict

  2. 迭代超过SubkeyList

  3. sub_key/SubkeyList创建一个新词典:sub_dict

  4. 对于Header['dtc_all']中的每element,使用get_value_nested_dictNested_Dict中获得值,并将其添加到sub_dict

  5. sub_key下加上sub_dictnew_dict

    def create_new_dict(Nested_Dict, Header, SubkeyList):
        new_dict = {}
        for sub_key in SubkeyList:
            sub_dict = {}
            for element, value in Header['dtc_all'].items():
                value = get_value_nested_dict(Nested_Dict, 'dtc_all', sub_key, element)
                if value:
                    sub_dict[element] = value[0]
            new_dict[sub_key] = sub_dict
        return new_dict
    

    New_dict=CREATE_NEW_DICT(NESTED_DICT,HEADER,SubkeyList)

Python相关问答推荐

Locust请求中的Python和参数

比较两个二元组列表,NP.isin

运行回文查找器代码时发生错误:[类型错误:builtin_index_or_system对象不可订阅]

Pydantic 2.7.0模型接受字符串日期时间或无

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

无法使用DBFS File API路径附加到CSV In Datricks(OSError Errno 95操作不支持)

梯度下降:简化要素集的运行时间比原始要素集长

在含噪声的3D点网格中识别4连通点模式

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

在嵌套span下的span中擦除信息

dask无groupby(ddf. agg([min,max])?''''

重置PD帧中的值

用两个字符串构建回文

如何从比较函数生成ngroup?

如何在Gekko中处理跨矢量优化

Python协议不兼容警告

为什么后跟inplace方法的`.rename(Columns={';b';:';b';},Copy=False)`没有更新原始数据帧?

如何防止html代码出现在quarto gfm报告中的pandas表之上

设置索引值每隔17行左右更改的索引

Pythonquests.get(Url)返回Colab中的空内容