从python中存储键树的数组中获取值

new9mtju  于 2022-12-02  发布在  Python
关注(0)|答案(2)|浏览(179)

我有一个数组,用来存储字典中的键树。

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",然后我想给它设置一个不同的值。

jjhzyzn0

jjhzyzn01#

person_dict['person'].update({'first_name':'Ahmad'})

person_dict[key_tree[0]].update({key_tree[1]: 'Ahmad'})
ctrmrzij

ctrmrzij2#

您可以尝试以下操作:

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是你的最后一个容器(dict或list或任何可以订阅对象)对象,您可以使用value的值更新last_key的值。需要res = d行,因为您需要具有对最外层容器的引用,否则在for循环之后您只有最后一个内部容器。

相关问题