2016-04-26 139 views
2
def solution(dict, output, ini): 
    if (dict == None): 
     return None 
    else: 
     for key in dict: 
      if str(type(dict[key])) != str(type({})): 
       print(key) 
       output[ini + key] = dict[key] 
      else: 
       return solution(dict[key], output, ini + key + '.') 
    return output 

a = { 
    'Key1': '1', 
    'Key2': { 
     'a': '2', 
     'b': '3', 
     'c': { 
      'd': '3', 
      'e': '1' 
     } 
    } 
} 
print(solution(a, {}, "")) 

你好,我正在试图做一个功能,展平嵌套字典。为什么此输出每次都会返回不同的值?

例如一个应该打印:

{'Key2.b': '3', 'Key1': '1', 'Key2.c.d': '3', 'Key2.a': '2', 'Key2.c.e': '1'} 

但现在的代码随机给我回了正确的答案,但是从一系列的0-5如

{'Key2.b': '3', 'Key1': '1', 'Key2.c.d': '3', 'Key2.a': '2'}, 
{'Key2.b': '3', 'Key2.c.d': '3'} 

我发现如果我在我的其他语句中摆脱“返回”,它会起作用,但我不确定这是为什么?任何人都可以帮助我

回答

1

当您遍历dict中的键for key in dict:时,它将以随机顺序返回键,因为字典中的元素没有排序。如果Key1首先被处理,它将被添加到输出,并在下一次迭代Key2将被递归处理。现在,如果订单不同,并且Key2首先被处理,那么return solution(dict[key],output,ini+key+'.')将导致在Key1被添加到输出之前返回结果。 Key2中的嵌套元素也一样。如果您删除return语句,则无论迭代顺序如何,所有键都将被处理,您将得到预期的输出。

0

为你把结果output,你不应该在returnelse,否则,for循环将打破,其余的按键将被忽略。(只是删除return,它会做的工作)

相关问题