The Flat Dictionary

来源:互联网 发布:python celery 教程 编辑:程序博客网 时间:2024/06/05 00:43
#coding=utf-8def 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 resultif __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"}

0 0
原创粉丝点击