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
| def parcours(d1, d2):
for key in d2.keys() :#on met a jour d1 par rapport aux keys de d2 pour le bon parcours en zip() plus tard
if key not in d1.keys() :
d1[key] = d2.get(key)
for key in d1.keys() :#on met a jour d2 par rapport aux keys de d1 pour le bon parcours en zip() plus tard
if key not in d2.keys() :
d2[key] = d1.get(key)
for (k1, v1),(k2, v2) in zip(d1.items(), d2.items()) :#on parcourt d1 et d2 en parallele
if v1 is not v2 :#difference de value : traitement
if isinstance(v1, dict) & isinstance(v2, dict) :#si v1 et v2 sont differents en tant que dict, une recursivite modifiera ces valeurs en tant que clef (2eme ligne du code)
parcours(v1, v2)
else :# on a affaire a au moins une valeur de type different que dict (on ira pas plus loin du coup) : une liste va imbriquer les deux valeurs
listDic = []
listDic.append(v1)
listDic.append(v2)
d1[k1] = listDic
else :# on parcourt le reste de l'arborescence.
if isinstance(v1, dict) & isinstance(v2, dict) :
parcours(v1, v2)
return d1
c={'a':{'b':{'hihi':'huhu'}}, 'x':{'coucou':'beu'}, 'y':{'coucou':'beu'}}
d={'a':{'b':{'hihi':['haha','hyhy']}},'c':{'u':'v'}}
par = parcours(c, d)
print '\nOn a maintenant c update:\n\n', par |
Partager