代码之家  ›  专栏  ›  技术社区  ›  Ninja Warrior 11

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

  •  0
  • Ninja Warrior 11  · 技术社区  · 6 年前

    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 回复  |  直到 6 年前
        1
  •  2
  •   Dani Mesejo    6 年前

    可以这样做:

    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}}