面试题答案
一键面试- 思路分析:
- 首先,需要遍历嵌套的列表和字典结构,获取所有的键值对。
- 由于可能有重复的键值对,使用集合来存储唯一的键值对。
- 为了高效查询,可以将这些唯一键值对存储在字典中,以键值对中的键作为字典的键,值作为字典的值。
- 可能遇到的问题及解决方案:
- 问题:遍历嵌套结构时,如何处理不同层次的列表和字典。
- 解决方案:使用递归方法处理嵌套结构。对于列表,遍历列表中的每个元素;对于字典,遍历字典的键值对,并对值递归处理。
- 问题:如何将键值对以可哈希的形式存储在集合中。
- 解决方案:将键值对转换为元组,因为元组是可哈希的,可以存储在集合中。
- 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
中,最后将集合转换为字典以方便高效查询。