改进python中的flatten函数

时间:2016-08-25 09:49:10

标签: python list dictionary flatten

鉴于功能需要一些改进:

def flatten(d, parent_key=''):
    items = []
    for k, v in d.items():
        try:
            items.extend(flatten(v, '%s%s.' % (parent_key, k)).items())
        except AttributeError:
            items.append(('%s%s' % (parent_key, k), v))
    return dict(items)

我想修改上层功能。
这也使列表变得扁平化:

{'d': [1, 2, 3]}

对于这样的事情:

{'d[0]': 1, 'd[1]': 3, 'd[2]': 3}

修改 本规范适用于我,但它不像第一个那样光滑,有任何改进的想法吗?

def flatten_dict(d):
    def items():
        for key, value in d.items():
            if isinstance(value, dict):
                for subkey, subvalue in flatten_dict(value).items():
                    yield key + "." + subkey, subvalue
            elif isinstance(value, list):
                for index, val in enumerate(value):
                    yield key + "[" + str(index) + "]" , value[index]
            else:
                yield key, value

    return dict(items())

1 个答案:

答案 0 :(得分:0)

试试这个,

def flattern(dict_):
    result = {}
    for key in dict_:
        for i,j in enumerate(dict_[key]):
            result[key+'['+str(i)+']'] = j
    return result

这样调用函数,

In [40]: d
Out[40]: {'a': [1, 2, 3, 7], 'd': [1, 2, 3]}

In [41]: flattern(d)
Out[41]: {'a[0]': 1, 'a[1]': 2, 'a[2]': 3, 'a[3]': 7, 'd[0]': 1, 'd[1]': 2, 'd[2]': 3}