[Python] How to recursively replace character in keys of a nested dictionary?

Discussão em 'Python' iniciado por Stack, Março 17, 2025.

  1. Stack

    Stack Membro Participativo

    I'm trying to create a generic function that replaces dots in keys of a nested dictionary. I have a non-generic function that goes 3 levels deep, but there must be a way to do this generic. Any help is appreciated! My code so far:

    output = {'key1': {'key2': 'value2', 'key3': {'key4 with a .': 'value4', 'key5 with a .': 'value5'}}}

    def print_dict(d):
    new = {}
    for key,value in d.items():
    new[key.replace(".", "-")] = {}
    if isinstance(value, dict):
    for key2, value2 in value.items():
    new[key][key2] = {}
    if isinstance(value2, dict):
    for key3, value3 in value2.items():
    new[key][key2][key3.replace(".", "-")] = value3
    else:
    new[key][key2.replace(".", "-")] = value2
    else:
    new[key] = value
    return new

    print print_dict(output)


    UPDATE: to answer my own question, I made a solution using json object_hooks:

    import json

    def remove_dots(obj):
    for key in obj.keys():
    new_key = key.replace(".","-")
    if new_key != key:
    obj[new_key] = obj[key]
    del obj[key]
    return obj

    output = {'key1': {'key2': 'value2', 'key3': {'key4 with a .': 'value4', 'key5 with a .': 'value5'}}}
    new_json = json.loads(json.dumps(output), object_hook=remove_dots)

    print new_json

    Continue reading...

Compartilhe esta Página