マルチレベルの辞書を 1 レベルの辞書のリストに変換する関数に取り組んでいます。
ロジックは正しいようです。しかし、実行すると、while ループが無限に実行されます。初めてwhileループに入ったときに、機能していたことがわかりましたnext_level.pop()
。while ループの 2 回目以降、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