通過嵌套字典的遞歸函數。
- 通過
for
環獲得來自字典公共密鑰由keys()
和set operation.
- 迭代公共密鑰。
- 檢查
type
是否爲dict
。
- 如果值類型爲
dict
,則調用相同的函數並將值字典作爲參數傳遞。並將結果作爲關鍵字添加到modified
字典中。
- 如果值類型不是字典,則將其添加到
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 2015-02-07 03:01:02
我的錯誤是未定義的變量。我想要的結果是打印出來(我選擇了一個字典)在字典中修改過的鍵。 – 2015-02-07 03:13:19