Функция рекурсии для вложенного словаря.
- Получить общие ключи от оба словаря
keys()
и set operation.
- общих ключей итерации по
for
циклу.
- Проверить, есть ли значение
dict
или нет.
- Если тип значения равен
dict
, тогда вызовите эту же функцию и введите словарь значений в качестве аргументов. и добавить результат как ключ в словарь modified
.
- Если тип значения не является dict, то добавьте в словарь
modified
.
код:
dict1 = {
'medic1' : {'date' : '02/02/2015', 'no' : '123' },
'medic2' : {'date' : '02/03/2015', 'no' : '456' },
'testkey1': 'testvalue1',
'testkey2': 'testvalue2',
'testkey3':{ "level2_1":"value2_1",
"level2_2":{
"level3_1": "value3_1_change",
"level3_2": "value3_2",
}
}
}
dict2 = {
'medic1' : {'date' : '02/02/2015', 'no' : '456' },
'medic2' : {'date' : '02/03/2015', 'no' : '456' },
'testkey1': 'testvalue1',
'testkey2': 'testvalue22',
'testkey3':{ "level2_1":"value2_1",
"level2_2":{
"level3_1": "value3_1",
"level3_2": "value3_2",
}
}
}
import copy
def compareDict(dict1, dict2):
d1_keys = dict1.keys()
d2_keys = dict2.keys()
intersect_keys = set(d1_keys).intersection(set(d2_keys))
modified = {}
for i in intersect_keys:
if dict1[i] != dict2[i] :
if isinstance(dict1[i], dict) and isinstance(dict1[i], dict):
modified[i]=compareDict(dict1[i], dict2[i])
else:
modified.update({i : (dict1[i], dict2[i])})
return copy.deepcopy(modified)
modified = compareDict(dict1, dict2)
import pprint
pprint.pprint(modified)
выход:
[email protected]:~/Desktop/stackoverflow$ python 5.py
{'medic1': {'no': ('123', '456')},
'testkey2': ('testvalue2', 'testvalue22'),
'testkey3': {'level2_2': {'level3_1': ('value3_1_change', 'value3_1')}}}
Что вы имеете в виду "сравнить"? Из вашего примера, похоже, вы пытаетесь каким-то образом создать новый словарь, который их объединяет, но вы используете неопределенную переменную 'o'. Пожалуйста, объясните, какой результат вы хотите. – BrenBarn
моя ошибка для неопределенной переменной. результат, который я хочу, - это распечатать (я выбрал для него dict) ключи, которые были модифицированы в dict. –