python字典扁平化,递归实现和普通实现

2019-11-26  本文已影响0人  小尤root

原字典
in_data = {
'jack': {
'math': {'teacher': 'zhang', 'score': '75'},
'english': {'teacher': 'xu', 'score': '90'},
'height': '172'
}
}
目标字典
out_date={
"jack_math_teacher": "zhang",
"jack_math_score": "75",
"jack_english_teacher": "xu",
"jack_english_score": "90",
"jack_height": "172"
}
普通for循环嵌套实现

out_dict={}
for ik,iv in in_data.items():
    for jk , jv in iv.items():
        if isinstance(jv,dict):
            for hk,hv in jv.items():
                out_dict[ik+"_"+jk+"_"+hk]=hv
        else:
            out_dict[ik+"_"+jk] = jv
print(out_date)

递归实现

def dict_to_tree(dict_o=None):
    if not dict_o or not isinstance(dict_o,dict):
        return
    def _dict_to_tree(dict_o,target=None,prefix=""):
        if target is None:
            target={}
        for k,value in dict_o.items():
            if isinstance(value,dict):
                #递归调用
                _dict_to_tree(value,target,prefix+k+"_")
            else:
                target[prefix+k] = value
        return target
    return _dict_to_tree(dict_o)
y_dict = dict_to_tree(in_data)
print(y_dict)
上一篇下一篇

猜你喜欢

热点阅读