【问题标题】: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