1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
# -*- coding: iso-8859-1 -*-
def deep_update(dict_1, dict_2):
""" Met à jour dict_1 en fonction de dict_2
"""
# Les procédures employées sont légèrement différentes si les
# éléments à mettre à jour sont des listes et non des dico
if type(dict_1) == type([]):
if type(dict_2) == type([]):
for key, value in enumerate(dict_2):
try:
dict_1[key] = deep_update(dict_1[key], value)
except IndexError:
dict_1.append(value)
return dict_1
elif type(dict_2) == type({}):
# cette ruse est là pour permettre de mettre à jour un élément
# précis d'une liste (voir le cas '2' dans l'exemple ci dessous)
for key, val in dict_2.items():
dict_1[int(key)] = deep_update(dict_1[int(key)], value)
return dict_1
elif type(dict_1) == type({}):
for key, value in dict_2.items():
try:
dict_1[key] = deep_update(dict_1[key], value)
except KeyError:
dict_1[key] = value
return dict_1
else:
return dict_2
dict_1 = {'1':'string',
'2':[1, 2, 3, 4],
'3':{'a':'aaa', 'b':'bbb'}
}
dict_2 = {'1':'strong',
'2':{2:5},
'3':{'b':'bbbb', 'c':'ccc'},
'4':'tst'}
print (deep_update(dict_1, dict_2)) |
Partager