MST

星途 面试题库

面试题:Python字典:复杂嵌套结构操作

有一个嵌套字典结构data = {'outer1': {'inner1': [1, 2, 3], 'inner2': {'sub1': 'value1'}}, 'outer2': {'inner3': 42}}。编写一个函数,能够根据传入的键路径(例如['outer1', 'inner2','sub1'])获取对应的值,同时编写一个函数,能够根据传入的键路径和新值(例如['outer2', 'inner3', 100])更新对应的值。说明在处理这类复杂嵌套结构时,需要注意的要点和优化方向。
38.3万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
def get_value_by_path(data, path):
    current = data
    for key in path:
        if key not in current:
            return None
        current = current[key]
    return current


def update_value_by_path(data, path, new_value):
    current = data
    for key in path[: -1]:
        if key not in current:
            current[key] = {}
        current = current[key]
    last_key = path[-1]
    current[last_key] = new_value


# 测试
data = {'outer1': {'inner1': [1, 2, 3], 'inner2': {'sub1': 'value1'}}, 'outer2': {'inner3': 42}}
print(get_value_by_path(data, ['outer1', 'inner2','sub1']))
update_value_by_path(data, ['outer2', 'inner3'], 100)
print(data)

处理这类复杂嵌套结构时需要注意的要点:

  1. 键的存在性检查:在获取或更新值之前,需要检查每一级的键是否存在,避免KeyError。例如在get_value_by_path函数中,每次访问下一级字典之前检查键是否存在;在update_value_by_path函数中,在创建最后一级键之前,也需要检查中间各级键是否存在。
  2. 数据类型的兼容性:在更新值时,要确保新值的数据类型与原结构兼容。例如,如果原结构期望是一个字典,而传入的新值是一个整数,可能会导致程序逻辑错误。

优化方向:

  1. 异常处理的增强:可以考虑在函数中添加更详细的异常处理,例如除了KeyError,还可以处理类型错误等其他可能出现的异常情况,使函数更加健壮。
  2. 使用递归优化:对于非常深层次的嵌套结构,递归方式可能使代码更加简洁和易于理解。例如,可以通过递归函数来处理获取和更新值的逻辑,而不是使用当前的迭代方式。不过递归需要注意栈溢出的问题。
  3. 性能优化:对于大型嵌套结构,可以考虑缓存一些中间结果,避免重复查找,提高获取和更新值的效率。