python 合并多维字典

python 合并多维字典

作者 Sunnying Zheng 日期 2017-07-27
python 合并多维字典

最近在写一个项目,配置文件采用 子类替换父类相同key的参数的形式,突然发现一个问题,如果字典中包涵字典的情况下,覆盖时完全覆盖掉原有字典中的参数,不会合并;

自己写个方法做多维字典合并,记录一下;

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
def merge_dict(dict1,dict2):
'''
合并字典
:return:
'''
if not isinstance(dict1,dict) or not isinstance(dict2,dict):
return dict1
for key,info in dict2.items():
if dict1.has_key(key):
if isinstance(dict1[key], dict):
dict1[key] = self.merge_dict(dict1[key],info)
elif isinstance(dict1[key], list):
dict1[key].extend(info)
else:
dict1[key] = info
else :
dict1[key] = info
return dict1
def run():
'''
获取配置文件
:return:
'''
default_config = self.load("config/yaml/default.yaml").get('default')
if self.game is None or default_config is None:
return default_config
game_config = self.load("config/yaml/{}.yaml".format(self.game))
if game_config.get('default') is not None:
default_config = self.merge_dict(default_config,game_config.get('default'))
if self.platform is None:
return default_config
platform_config = game_config.get(self.platform)
if platform_config is not None:
default_config = self.merge_dict(default_config,platform_config)
return default_config
run()