如何更新多级字典?

时间:2016-11-18 11:10:07

标签: python dictionary nested

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 ]
        });


}

如何更新上述代码中的多级字典?最后,我应该更新新值的字典。

2 个答案:

答案 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