我正在研究將多級字典轉換爲單級詞典列表的功能。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