MST

星途 面试题库

面试题:Python嵌套字典在复杂业务场景下的优化

假设你有一个非常大的嵌套字典,模拟一个电商平台的订单数据,结构如下:`orders = {'user1': {'order1': {'items': [{'product': 'A', 'price': 10, 'quantity': 2}, {'product': 'B', 'price': 15, 'quantity': 1}], 'total': 35}, 'order2': {'items': [{'product': 'C', 'price': 20, 'quantity': 3}], 'total': 60}}, 'user2': {...}}`。为了提高查询特定用户特定订单总金额的效率,你会如何优化这个数据结构,以及如何编写相应的查询函数?请详细阐述优化思路和实现代码。
23.0万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

优化思路

  1. 使用哈希表加速查找:原嵌套字典结构在查询特定用户特定订单总金额时,需要逐层遍历字典。可以通过构建一个新的数据结构,以用户 - 订单对作为键,总金额作为值,利用哈希表的快速查找特性(平均时间复杂度为 O(1))来提高查询效率。
  2. 预处理数据:在构建新数据结构时,需要遍历原始的嵌套字典,提取出每个用户 - 订单对的总金额,并存储到新的数据结构中。

实现代码

orders = {'user1': {'order1': {'items': [{'product': 'A', 'price': 10, 'quantity': 2}, {'product': 'B', 'price': 15, 'quantity': 1}], 'total': 35}, 'order2': {'items': [{'product': 'C', 'price': 20, 'quantity': 3}], 'total': 60}}}

# 构建优化后的数据结构
optimized_orders = {}
for user, user_orders in orders.items():
    for order, order_info in user_orders.items():
        optimized_orders[(user, order)] = order_info['total']

# 查询函数
def query_total(user, order):
    return optimized_orders.get((user, order), None)


# 测试查询函数
print(query_total('user1', 'order1'))
print(query_total('user1', 'order3'))

在上述代码中:

  1. 首先通过两层循环遍历原始的 orders 字典,将每个用户 - 订单对及其对应的总金额存储到 optimized_orders 字典中。
  2. 然后定义了 query_total 函数,该函数接受用户和订单作为参数,直接从 optimized_orders 字典中查询对应的总金额。如果查询不到,则返回 None