小编Ash*_*hli的帖子

Python 3:展平嵌套字典和字典中的列表

我正在处理一个复杂的嵌套字典和列表数据结构。我需要展平数据并将所有嵌套项都置于0级。有关更多说明,请参见以下示例:

{a:1,b:2,c:{c1:[{c11:1,c12:2,c13:3},{c21:1,c22:2,c23:3}],d1:[{d11:1,d12:2,d13:3},{d21:1,d22:2,d23:3}]},x:1,y:2}
Run Code Online (Sandbox Code Playgroud)

我需要将其展平为:

{a:1,b:2,c_c1_c11:1, c_c1_c12:2,c_c1_c13:3,c_c1_c21:1,c_c1_c22:2,c_c1_c23:3, c_d1,d11:1...and so on}
Run Code Online (Sandbox Code Playgroud)

我从这篇文章的第一个答案中获得了参考,但是它只有在我嵌套了字典的情况下才可以使用,并且如果列表嵌套在字典中并且更多的字典嵌套在这些列表中则不能使用。

我对代码进行了一些修改以适合我的用例,但是此代码不起作用

def flattenDict(d):
node_map = {}
node_path = []
def nodeRecursiveMap(d, node_path):
    for key, val in d.items():
        if ((type(val) is not dict)&(type(val) is not list)): 
            node_map['_'.join(node_path + [key])] = val
        if type(val) is list:
            def nodeListRecursion(val,node_path):
                for element in val:
                    if ((type(element) is not dict)&(type(element) is not list)) : node_map['_'.join(node_path + [key])] = element
                    if type(element) is list: nodeListRecursion(element,node_map)
                    if type(element) is dict: nodeRecursiveMap(element, node_path + [key])
            nodeListRecursion(val,node_path)
        if …
Run Code Online (Sandbox Code Playgroud)

python dictionary nested list flatten

3
推荐指数
2
解决办法
2752
查看次数

标签 统计

dictionary ×1

flatten ×1

list ×1

nested ×1

python ×1