MST

星途 面试题库

面试题:Python集合与字典在复杂数据处理中的高级应用

假设你有一个复杂的数据集,其中包含嵌套的列表和字典结构。你需要从中提取出所有唯一的键值对组合,并将其存储为一个可高效查询的数据结构。请描述如何使用Python的集合和字典来实现这一目标,包括可能遇到的问题及解决方案,同时提供完整的Python代码实现。
24.7万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 思路分析
    • 首先,需要遍历嵌套的列表和字典结构,获取所有的键值对。
    • 由于可能有重复的键值对,使用集合来存储唯一的键值对。
    • 为了高效查询,可以将这些唯一键值对存储在字典中,以键值对中的键作为字典的键,值作为字典的值。
  2. 可能遇到的问题及解决方案
    • 问题:遍历嵌套结构时,如何处理不同层次的列表和字典。
    • 解决方案:使用递归方法处理嵌套结构。对于列表,遍历列表中的每个元素;对于字典,遍历字典的键值对,并对值递归处理。
    • 问题:如何将键值对以可哈希的形式存储在集合中。
    • 解决方案:将键值对转换为元组,因为元组是可哈希的,可以存储在集合中。
  3. Python代码实现
def flatten_dict(data, parent_key='', sep='_'):
    items = []
    for k, v in data.items():
        new_key = f"{parent_key}{sep}{k}" if parent_key else k
        if isinstance(v, dict):
            items.extend(flatten_dict(v, new_key, sep).items())
        else:
            items.append((new_key, v))
    return dict(items)


def extract_unique_kv(data):
    unique_kv_set = set()
    def recursive_extract(d):
        if isinstance(d, dict):
            for key, value in d.items():
                if isinstance(value, (dict, list)):
                    recursive_extract(value)
                else:
                    unique_kv_set.add((key, value))
        elif isinstance(d, list):
            for item in d:
                recursive_extract(item)


    recursive_extract(data)
    unique_kv_dict = {k: v for k, v in unique_kv_set}
    return unique_kv_dict


# 示例复杂数据集
complex_data = {
    'a': 1,
    'b': {
        'c': 2,
        'd': [3, {'e': 4}]
    }
}


result = extract_unique_kv(complex_data)
print(result)

在上述代码中:

  • flatten_dict函数用于将嵌套字典展平,这里只是作为辅助函数,实际主要功能在extract_unique_kv函数中。
  • extract_unique_kv函数通过递归方式遍历复杂数据集,提取所有键值对并存储到集合unique_kv_set中,最后将集合转换为字典以方便高效查询。