Python: 복잡한dict/json 귀속 처리 (키가 존재하는지, 필드를 삭제하고 정렬하는지 판단)


#  json/dict  
def dict_ordered(obj):
    if isinstance(obj, dict):
        return sorted((k, dict_ordered(v)) for k, v in obj.items())
    if isinstance(obj, list):
        return sorted(dict_ordered(x) for x in obj)
    else:
        return obj

#    json/dict     
def dict_del(key,obj):
    if isinstance(obj, dict):
        if key in obj:
            obj.pop(key)
        for k, v in obj.items():
            dict_del(key,v)
    if isinstance(obj, list):
        for x in obj:
            dict_del(key,x)
    else:
        pass
    return obj

#  json/dict       key
def dict_has_key(key,obj):
    if isinstance(obj, dict):
        for k, v in obj.items():
            if k == key:
                return True
            else:
                ret = dict_has_key(key,v)
                if ret:
                    return True
    elif isinstance(obj, list):
        for x in obj:
            ret = dict_has_key(key,x)
            if ret:
                return True
    else:
        pass


if __name__ == '__main__':
    tester = {
    "base_config":{
        "enforce":{
            "value":"0",
            "inherit":"0",
            "global":"0"
        },
        "modify":{
            "value":"0",
            "inherit":"0",
            "global":"0"
        }
    },
    "safe_control_list":{
        "list":[
            {
                "gid":"0",
                "gname":"     ",
                "isactive":"1",
                "rule_id":"0",
                "rule_name":"     ",
                "time_range":"    ",
                "time_range_id":"1",
                "policy_tpl":"33",
                "policy_tpl_id":"17",
                "isonline":"3",
                "priority":"1"
            }
        ]
    }
}

    print(dict_has_key("rule_id",tester))
    print(dict_del("policy_tpl_id",tester))
    print(dict_ordered(tester))

좋은 웹페이지 즐겨찾기