Case 'SVG' :
addImage(cnt,e);
function addImage (cnt,e) {
//Serialize the svg element and then put it in a canvas
//Then update the cnt object
var url = canvas.toDataURL('image/png');
cnt.push({image: url,
width: 200,
height: 250,
margin: [ 20, 0, 0, 0 ]
});
}
如何更新上述代码中的多级字典?最后,我应该更新新值的字典。
答案 0 :(得分:0)
这是在逗号分割字符串之后使用zip
执行此操作的一种方法,然后在拆分斜杠后迭代键:
for k, v in zip(keys_to_be_updated.split(','), values_to_be_updated.split(',')):
d = test_dict
keys = k.split('/')
if len(keys) == 1:
d[k] = v
else:
for i in keys[:-1]:
d = d[i]
d[keys[-1]] = v
print(test_dict)
# {'device2': {'username': 'user2', 'IP': '11.11.11.11', 'password': 'pwd2', 'name': 'USER_TESTER2'}, 'path': '/home/user/user_name/ABCD', 'device1': {'username': 'user1', 'IP': '10.10.10.10', 'password': 'pwd1', 'name': 'USER_TESTER1'}}
答案 1 :(得分:0)
这类似于摩西的解决方案,但它避免在循环中执行element[]
。
if
<强>输出强>
from pprint import pprint
test_dict = {
'path': '/home/user/user_name',
'device1': {
'IP': '10.10.10.10',
'password': 'pwd1',
'username': 'user1',
'name':'USER_DEFINED'
},
'device2': {
'IP': '11.11.11.11',
'password': 'pwd2',
'username': 'user2',
'name':'USER_DEFINED_TEST'
}
}
keys_to_be_updated = "path,device1/name,device2/name"
values_to_be_updated = "/home/user/user_name/ABCD,USER_TESTER1,USER_TESTER2"
data = keys_to_be_updated.split(','), values_to_be_updated.split(',')
for key, val in zip(*data):
keychain = key.split('/')
d = test_dict
for k in keychain[:-1]:
d = d[k]
d[keychain[-1]] = val
pprint(test_dict)
这是一个小变化。我们使用{'device1': {'IP': '10.10.10.10',
'name': 'USER_TESTER1',
'password': 'pwd1',
'username': 'user1'},
'device2': {'IP': '11.11.11.11',
'name': 'USER_TESTER2',
'password': 'pwd2',
'username': 'user2'},
'path': '/home/user/user_name/ABCD'}
来执行逗号分割步骤。
map