好的,这让我头痛。我有两个包含对象组的字典,如下所示:
groups = {
'servers': ['unix_servers', 'windows_servers'],
'unix_servers': ['server_a', 'server_b', 'server_group'],
'windows_servers': ['server_c', 'server_d'],
'server_group': ['server_e', 'server_f']
}
hosts = {
'server_a': '10.0.0.1',
'server_b': '10.0.0.2',
'server_c': '10.0.0.3',
'server_d': '10.0.0.4',
'server_e': '10.0.0.5',
'server_f': '10.0.0.6'
}
我期待的输出结果是:
d3 = {
'servers': {
'unix_servers': {
'server_a': '10.0.0.1',
'server_b': '10.0.0.2',
'server_group': {
'server_e': '10.0.0.5',
'server_f': '10.0.0.6'
}
},
'windows_servers': {
'server_c': '10.0.0.3',
'server_d': '10.0.0.4'
}
}
}
我遇到的问题是,我无法预先知道递归有多少层,因为嵌套组理论上可以无限进行。此外,我也在确定哪些键应该成为合并字典中的顶级键方面遇到麻烦。
我目前拥有以下内容:
def resolve(d1, d2):
for k, v in d1.items():
for i in v:
if i in d2.keys():
d3[k] = {i: d2[i]}
这将返回:
{
"servers": {
"unix_servers": {
"server_a": "10.0.0.1",
"server_b": "10.0.0.2",
"server_group": {
"server_e": "10.0.0.5",
"server_f": "10.0.0.6"
}
},
"windows_servers": {
"server_c": "10.0.0.3",
"server_d": "10.0.0.4"
}
},
"unix_servers": {
"server_b": "10.0.0.2"
},
"windows_servers": {
"server_d": "10.0.0.4"
},
"server_group": {
"server_f": "10.0.0.6"
}
}
这很接近,但明显缺少递归,并且无法处理键的嵌套。主要是在这里寻找指针,递归逻辑还没有理解...