如何将工作代码中的列表/元组替换为字典以提升性能?
用字典替换列表/元组优化大数据量计算性能
原代码通过列表和元组存储计算结果,但在大数据量场景下性能受限,需要将存储结构替换为字典以提升性能,同时需满足以下要求:
- 保留
calc_x和calc_y独立变量,可单独在append中调用 - 新的
new变量支持像原代码中print_x = [tuple(i[1]) for i in new]这样的方式按需提取数值
原列表元组版本代码
mylist = {('Jack', 'Grace', 8, 9, '15:00'): [0, 1, 1, 5], ('William', 'Dawson', 8, 9, '18:00'): [1, 2, 3, 4], ('Natasha', 'Jonson', 8, 9, '20:45'): [0, 1, 1, 2]} new = [] for key, value in mylist.items(): # 创建变量并执行计算 calc_x= sum(value)/ len(value) calc_y = (calc_x *100) / 2 # 创建包含3个元组的列表 if calc_x > 0.1: new.append([[key], [calc_x], [calc_y]]) print(new) print(" ") # 提取calc_x示例 print_x = [tuple(i[1]) for i in new] print(print_x)
优化后的字典版本代码
mylist = {('Jack', 'Grace', 8, 9, '15:00'): [0, 1, 1, 5], ('William', 'Dawson', 8, 9, '18:00'): [1, 2, 3, 4], ('Natasha', 'Jonson', 8, 9, '20:45'): [0, 1, 1, 2]} new = [] for key, value in mylist.items(): # 保留独立计算变量 calc_x = sum(value) / len(value) calc_y = (calc_x * 100) / 2 if calc_x > 0.1: # 用字典存储结构,键名明确对应数据类型 new.append({ 'key': key, 'calc_x': calc_x, 'calc_y': calc_y }) print(new) print(" ") # 按需提取calc_x,逻辑更直观,性能更优 print_x = [(item['calc_x'],) for item in new] print(print_x) # 按需提取calc_y示例 print_y = [(item['calc_y'],) for item in new] print(print_y) # 提取key示例 print_keys = [(item['key'],) for item in new] print(print_keys)
优化说明
- 保留独立变量:
calc_x和calc_y依然作为独立计算变量存在,计算逻辑完全不变,只是将结果存入字典的对应键中。 - 按需调用支持:通过字典的键名直接访问对应值,相比原代码通过索引
i[1]提取,不仅逻辑更清晰,在大数据量下字典的键查找性能远高于列表的索引遍历。示例中的print_x通过列表推导式遍历new中的每个字典,提取calc_x并转为元组,实现了和原代码一致的输出效果。 - 性能提升:字典的哈希表结构使得键查找时间复杂度为O(1),远优于列表索引遍历在复杂场景下的性能,尤其在大数据量处理时优势明显。
内容的提问来源于stack exchange,提问作者user20812299
相关产品推荐
相关产品推荐

