Flatten nested dictionaries, compressing keys

前端 未结 28 2810
遇见更好的自我
遇见更好的自我 2020-11-22 01:16

Suppose you have a dictionary like:

{\'a\': 1,
 \'c\': {\'a\': 2,
       \'b\': {\'x\': 5,
             \'y\' : 10}},
 \'d\': [1, 2, 3]}

Ho

28条回答
  •  庸人自扰
    2020-11-22 01:36

    Using generators:

    def flat_dic_helper(prepand,d):
        if len(prepand) > 0:
            prepand = prepand + "_"
        for k in d:
            i=d[k]
            if type(i).__name__=='dict':
                r = flat_dic_helper(prepand+k,i)
                for j in r:
                    yield j
            else:
                yield (prepand+k,i)
    
    def flat_dic(d): return dict(flat_dic_helper("",d))
    
    d={'a': 1, 'c': {'a': 2, 'b': {'x': 5, 'y' : 10}}, 'd': [1, 2, 3]}
    print(flat_dic(d))
    
    
    >> {'a': 1, 'c_a': 2, 'c_b_x': 5, 'd': [1, 2, 3], 'c_b_y': 10}
    

提交回复
热议问题