不管键的位置如何,都更新字典值

时间:2018-08-24 10:55:06

标签: python

Python中是否有一个函数可以更改键的值而与键的位置无关?例如,data没有嵌套的map,而model有嵌套的。 data['longitude']的值应放在model['map']['longitude']中。我不知道该怎么办,有可能吗?

data = {
    'record': 'Nicaragua',
    'text': 'Hello World!',
    'latitude': 10.1,
    'longitude': 122.55,
    'address': None
}

model = {
    "_id": 1535083840,
    "record": "Germany",
    "text": "<br>",
    "map": {
        "latitude": 0.0,
        "longitude": 0.0
    }
}


model.pop("_id")  # removing the _id in model

expected_result = {
    "record": "Nicaragua",
    "text": "Hello World!",
    "map": {
        "latitude": 10.1,
        "longitude": 122.55
    }
}

1 个答案:

答案 0 :(得分:2)

可以这样做:

data = {
    'record': 'Nicaragua',
    'text': 'Hello World!',
    'latitude': 10.1,
    'longitude': 122.55,
    'address': None
}

model = {
    "record": "Germany",
    "text": "<br>",
    "map": {
        "latitude": 0.0,
        "longitude": 0.0
    }
}


def r_update(target, key, value):
    if key in target:
        target[key] = value
    else:
        for k, v in target.items():
            if isinstance(v, dict):
                r_update(v, key, value)


def update(source, target):
    for key, value in source.items():
        r_update(target, key, value)


update(data, model)
print(model)

输出

{'record': 'Nicaragua', 'text': 'Hello World!', 'map': {'longitude': 122.55, 'latitude': 10.1}}