我正在研究将多级字典转换为单级词典列表的功能。Python pop()不会删除项目
逻辑似乎是正确的。但是当我运行它时,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
'pop()'函数似乎对我可靠地工作。你能解释一下“我认为它可能与参考事物有关”吗? – 2012-08-01 20:57:18
你能解释一下你想做什么吗?我发现你的代码难以遵循,所以我想要更多的解释。 – steveha 2012-08-01 21:06:06
@GregHewgill因为当对象是可变的时候python是通过引用传递的。所以我猜想它可能是相关的。 – Conan 2012-08-01 21:06:09