【问题标题】:Extract & Append Inner Dictionary to Outer Dictionary提取内部字典并将其附加到另一个字典
【发布时间】:2022-07-18 12:57:51
【问题描述】:

概述

为了将 API 响应转换为 Pandas Dataframes,我正在寻找一种解决方案,该解决方案可以从外部(主)字典中提取内部字典,并将内部字典中的键值对附加到外部字典中,以获得一个不错的字典,可以转换为数据框。我找不到解决方案,所以我在另一个问题的帮助下自己构建了解决方案。

如果这个问题已经得到解答或者我的解决方案有问题,请告诉我。我希望这可以帮助某人,因为我花了很多时间试图找到解决方案。

输入

dict1 = {'outside_dict': {'middle_dict1': {'innerDict': 1}, 'middle_dict2' : 2},'innerDict': 3}

dict2 = {'outside_dict': {'middle_dict1': {'innerDict': 1}, },}

输出

dict1 = {'innerDict': 3, 'middle_dict2_outside_dict': 2, 'innerDict_middle_dict1_outside_dict': 1}

dict2 = {'innerDict_middle_dict1_outside_dict': 1}

【问题讨论】:

    标签: python pandas dictionary append extract


    【解决方案1】:

    说明

    merge_dicts 函数来自@Michael Spector 对问题How to merge dictionaries of dictionaries?的回答

    merge_dicts 函数将两个字典合并在一起并覆盖任何冲突的键。它还将 InnerDict 键附加到新的 OuterDict 键以供参考来自何处。

    extract_innerDict_to_outerDict 函数检查 OuterDict 中项目的副本,以检查外部词典的任何值是否是词典本身。如果是这样,它会再次调用自己深入到 OuterDict 中,直到找不到更多的字典。提取完成后,它会删除具有 Dictionary 类型作为值的键并继续下一个键。

    代码

    def extract_innerDict_to_outerDict(mainDict):
      """
      This function extracts innerDicts from outerDicts and appends to outerDict data.
      """
      for key, value in mainDict.copy().items():
          if isinstance(value, dict):
            extract_innerDict_to_outerDict(mainDict[key])
            merge_dicts(mainDict, mainDict[key], key)
            del mainDict[key]
    
        
      return mainDict
    
    def merge_dicts(dict1, dict2, innerDict_key):
      """ Recursively merges dict2 into dict1 """
      if not isinstance(dict1, dict) or not isinstance(dict2, dict):
          return dict2
      for k in dict2:
          if k in dict1:
              dict1[k + '_' + innerDict_key] = merge_dicts(dict1[k], dict2[k])
              print
          else:
              dict1[k + '_' + innerDict_key] = dict2[k]
      return dict1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-27
      • 2020-11-25
      • 1970-01-01
      • 2023-02-24
      • 2018-07-27
      • 2018-10-13
      • 2022-06-17
      • 1970-01-01
      相关资源
      最近更新 更多