Creating a nested dictionary from a flattened dictionary

后端 未结 7 2016
-上瘾入骨i
-上瘾入骨i 2020-12-15 02:43

I have a flattened dictionary which I want to make into a nested one, of the form

flat = {\'X_a_one\': 10,
        \'X_a_two\': 20, 
        \'X_b_one\': 10,         


        
相关标签:
7条回答
  • 2020-12-15 03:31

    Another non-recursive solution with no imports. Splitting the logic between inserting each key-value pair of the flat dict and mapping over key-value pairs of the flat dict.

    def insert(dct, lst):
        """
        dct: a dict to be modified inplace.
        lst: list of elements representing a hierarchy of keys
        followed by a value.
    
        dct = {}
        lst = [1, 2, 3]
    
        resulting value of dct: {1: {2: 3}}
        """
        for x in lst[:-2]:
            dct[x] = dct = dct.get(x, dict())
    
        dct.update({lst[-2]: lst[-1]})
    
    
    def unflat(dct):
        # empty dict to store the result
        result = dict()
    
        # create an iterator of lists representing hierarchical indices followed by the value
        lsts = ([*k.split("_"), v] for k, v in dct.items())
    
        # insert each list into the result
        for lst in lsts:
            insert(result, lst)
    
        return result
    
    
    result = unflat(flat)
    # {'X': {'a': {'one': 10, 'two': 20}, 'b': {'one': 10, 'two': 20}},
    # 'Y': {'a': {'one': 10, 'two': 20}, 'b': {'one': 10, 'two': 20}}}
    
    0 讨论(0)
提交回复
热议问题