Search code examples
pythonjsondictionarymergeaddition

Merge two dictionaries with an identical key using foor loop


i have these two dictionaries and i would like to add the data dict1 in dict2. how can i do that with python ?

dict1 = {
    213688169:
        {'stationCode': '6003',
         'station_id': 213688169,
         'num_bikes_available': 10,
         'numBikesAvailable': 10,
         'num_bikes_available_types': [{'mechanical': 10}, {'ebike': 0}],
         'num_docks_available': 10,
         'numDocksAvailable': 10,
         'is_installed': 1,
         'is_returning': 1,
         'is_renting': 1,
         'last_reported': 1619207955}
}

dict2 = {
    213688169:
        {'station_id': 213688169,
         'name': 'Benjamin Godard - Victor Hugo',
         'lat': 48.865983,
         'lon': 2.275725,
         'capacity': 35,
         'stationCode': '16107'}
}

i tried this but it's too long and complicated :

donnees=[]
for i in stations:
    for j in velib_description :
         if i['station_id'] == j['station_id']:
                List={}
                List['name'] = i['name']
                List['lat'] = i['lat']
                List['lon'] = i['lon']
                List['capacity'] = i['capacity']
                List['num_bikes_available'] = j['num_bikes_available']
                List['num_bikes_available_types'] = j['num_bikes_available_types']
                List['last_reported'] = j['last_reported']
                donnees.append(List)

I want to add in dict_2 = {num_bikes_available', 'num_bikes_available_types', last_reported': 1619207955 }

thank you


Solution

  • Perhaps you want dict.update?

    dict1 = {
        213688169: {
            "stationCode": "6003",
            "station_id": 213688169,
            "num_bikes_available": 10,
            "numBikesAvailable": 10,
            "num_bikes_available_types": [{"mechanical": 10}, {"ebike": 0}],
            "num_docks_available": 10,
            "numDocksAvailable": 10,
            "is_installed": 1,
            "is_returning": 1,
            "is_renting": 1,
            "last_reported": 1619207955,
        }
    }
    
    dict2 = {
        213688169: {
            "station_id": 213688169,
            "name": "Benjamin Godard - Victor Hugo",
            "lat": 48.865983,
            "lon": 2.275725,
            "capacity": 35,
            "stationCode": "16107",
        }
    }
    
    dict1_item = dict1[213688169]
    dict2[213688169].update({k: v for k, v in dict1_item.items() if k not in dict2})
    
    dict2
    

    This prints

    {213688169: {'station_id': 213688169,
      'name': 'Benjamin Godard - Victor Hugo',
      'lat': 48.865983,
      'lon': 2.275725,
      'capacity': 35,
      'stationCode': '6003',
      'num_bikes_available': 10,
      'numBikesAvailable': 10,
      'num_bikes_available_types': [{'mechanical': 10}, {'ebike': 0}],
      'num_docks_available': 10,
      'numDocksAvailable': 10,
      'is_installed': 1,
      'is_returning': 1,
      'is_renting': 1,
      'last_reported': 1619207955}}
    

    We're using a comprehension to get all the key/values from the first dictionary that aren't in the second, then updating the second dictionary. We have to do a little munging with the 213688169 key because your dictionary is nested.