Python如何从嵌套Dict中提取数据

时间:2017-11-07 22:20:44

标签: python python-3.x dictionary nested networkx

我有来自python networkX代码的输出:

flow_value, flow_dict = nx.maximum_flow(T, 'O', 'T')

print(flow_dict)

#Output as followesenter

#{'O': {'A': 4, 'B': 6, 'C': 4}, 'A': {'B': 1, 'D': 3}, 'B': {'C': 0, 'E': 3,'D': 4}, 'C': {'E': 4}, 'E': {'D': 1, 'T': 6}, 'D': {'T': 8}, 'T': {}}

我想提取表单中的所有数据,如下所示:

#('O','A',4),('O','B','6'),('O','C','4'),('A','B',1),......,('D','T',8)

我可以通过任何方式遍历嵌套的dict并获取我需要的数据吗?

1 个答案:

答案 0 :(得分:0)

我尝试过了,而且行得通。一些类型检查仅捕获字符串

def retrieve_all_strings_from_dict(nested_dict, keys_to_ignore = None):

    values = []

    if not keys_to_ignore:
        keys_to_ignore = []
    else: keys_to_ignore = to_list(keys_to_ignore)    

    if not isinstance(nested_dict,dict):
        return values

    dict_stack = []
    dict_stack.append(nested_dict)

    for dict_var in dict_stack:        
        data_list = [v for k,v in dict_var.items() if all([isinstance(v,str), k not in keys_to_ignore]) ]        
        additional_dicts = [v for k,v in dict_var.items() if isinstance(v,dict)]                    

        for x in additional_dicts:
            dict_stack.append(x)

        for w in data_list:
            values.append(w) 

    return values