MST

星途 面试题库

面试题:Python字典嵌套字典的内存优化与重构

假设你有一个非常大的嵌套字典,占用大量内存。字典结构类似:d = {str(i): {'sub1': [1] * 1000,'sub2': {'subsub1': 'a' * 500}} for i in range(10000)}。为了优化内存使用,你需要重构这个数据结构,同时确保在访问数据时(例如获取某个子字典或子值)的时间复杂度不会显著增加。请描述你的重构思路,并给出Python代码示例。
26.7万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 重构思路
    • 对于这种占用大量内存的嵌套字典,可以考虑使用生成器和延迟加载的策略。
    • 不一次性构建整个大字典,而是在需要访问某个键值对时才生成相应的数据。
    • 可以使用 collections.abc.Mapping 抽象基类来实现自定义的字典类,使其在行为上类似字典,但在内存使用上更优化。
  2. Python代码示例
from collections import abc


class LazyNestedDict(abc.Mapping):
    def __init__(self, num_elements):
        self.num_elements = num_elements

    def __getitem__(self, key):
        if key not in range(self.num_elements):
            raise KeyError(key)
        sub_dict = {
           'sub1': [1] * 1000,
           'sub2': {'subsub1': 'a' * 500}
        }
        return sub_dict

    def __len__(self):
        return self.num_elements

    def __iter__(self):
        return iter(range(self.num_elements))


# 使用示例
d = LazyNestedDict(10000)
# 获取某个子字典
sub_dict = d[0]
print(sub_dict['sub1'])
print(sub_dict['sub2']['subsub1'])