我正在研究将多级词典转换为单级词典列表的功能。
逻辑似乎是对的。但是当我运行它时,while 循环会无限运行。我发现它第一次进入 while 循环时next_level.pop()
正在工作。从 while 循环的第二次开始,该pop()
函数永远不会删除next_level
. 我还尝试通过 检索最后一项next_level[-1]
,并通过 删除最后一项del next_level[-1]
。但结果是一样的。我认为这可能与参考事物有关。任何的想法?
def flat_dict(self, params):
"""convert a multi-level dictionary to a list of one-level dictionaries"""
plist = next_level = []
next_level.append(params)
while next_level:
current_level = temp_level = next_level.pop()
for k, v in current_level.iteritems():
if isinstance(v, dict):
next_level.append(temp_level.pop(k))
pk = [x for x in next_level[-1].keys() if x.endswith('_id')]
temp_level[pk[0]] = next_level[-1][pk[0]]
plist.append(temp_level)
return plist