我有一个数组,用于存储字典中的键树。例如
person_dict = [{"person": {"first_name": "John", "age_of_children": [1, 8, 13]}}, ...]
是
key_tree = [0, "person", "first_name"]
或
key_tree = [0, "person", "age_of_children"]
这个数组计数包含一个或多个项目。
在这种情况下,我想通过动态使用key_tree
数组从person_dict
,"John"
获得值。然后我想为它设置一个不同的值。
您可以尝试以下操作:
def get_value(d, key_list):
for key in key_list:
d = d[key]
return d
def set_value(d, key_list, value):
res = d
*keys, last_key = key_list
for key in keys:
d = d[key]
d[last_key] = value
return res
person_dict = [{"person": {"first_name": "John", "age_of_children": [1, 8, 13]}}]
key_tree = [0, "person", "first_name"]
print(get_value(person_dict, key_tree))
print(set_value(person_dict, key_tree, "John2"))
输出:
John
[{'person': {'first_name': 'John2', 'age_of_children': [1, 8, 13]}}]
获取值只是使用get_value
,这是相当简单的。在set_value
中,您需要迭代直到最后一个键之前,以便您可以为最后一个对象分配新值。在for循环之后,d
是最后一个容器(字典或列表或任何可下标的对象)对象,您可以用value
的值更新last_key
的值。res = d
行是必需的,因为你需要有一个对最外层容器的引用,否则在for循环之后,你只有最后一个内部容器。
person_dict['person'].update({'first_name':'Ahmad'})
或
person_dict[key_tree[0]].update({key_tree[1]: 'Ahmad'})