#coding=utf-8 def flatten(dictionary): stack = [((), dictionary)] result = {} print("stack: ",stack) while stack: # stack被清空 path, current = stack.pop() if not current: result["/".join((path))] = "" for k, v in current.items(): # 判断v是否是字典 if isinstance(v, dict): # (path + (k,))合并成一个元组,存储新的路径 stack.append((path + (k,), v)) else: result["/".join((path + (k,)))] = v print("(path + (k,)) : ",path + (k,)) return result if __name__ == '__main__': #These "asserts" using only for self-checking and not necessary for auto-testing assert flatten({"key": "value"}) == {"key": "value"}, "Simple" assert flatten( {"key": {"deeper": {"more": {"enough": "value"}}}} ) == {"key/deeper/more/enough": "value"}, "Nested" assert flatten({"empty": {}}) == {"empty": ""}, "Empty value" assert flatten({"name": { "first": "One", "last": "Drone"}, "job": "scout", "recent": {}, "additional": { "place": { "zone": "1", "cell": "2"}}} ) == {"name/first": "One", "name/last": "Drone", "job": "scout", "recent": "", "additional/place/zone": "1", "additional/place/cell": "2"}
The Flat Dictionary
最新推荐文章于 2020-12-19 20:36:44 发布