Python可使用推导式改写列表转字典逻辑吗?有什么优化实现方案
优化方案
方案1:用推导式改写原有两个函数
完全可以用推导式改写你提供的两个函数,逻辑和原实现完全一致,同时简化代码:
改写二维列表转换函数
用列表推导式+列表分片替代嵌套循环:
def converting_to_two_dimensional_list(data: list, column_size: int): return [data[i:i+column_size] for i in range(0, len(data), column_size)]
改写结果构造函数
用enumerate提前获取表头索引,避免每次循环调用index查找索引提升效率,结合字典推导式+列表推导式实现:
def final_result(list_two_dimensional: list): headers = list_two_dimensional[0] data_rows = list_two_dimensional[1:] return {col: [row[idx] for row in data_rows] for idx, col in enumerate(headers)}
方案2:更精简的单函数实现
可以利用Python内置的zip方法转置二维列表,一步构造目标字典,代码更符合Python惯用写法:
def get_target_dict(data: list, column_size: int): two_d_list = [data[i:i+column_size] for i in range(0, len(data), column_size)] return {header: list(values) for header, *values in zip(*two_d_list)} # 调用测试 if __name__ == '__main__': data = ['Sectors', 'Countries', 'Regions', 6, 9, 4, 2, 3, 0] column_size = 3 print(get_target_dict(data, column_size)) # 输出:{'Sectors': [6, 2], 'Countries': [9, 3], 'Regions': [4, 0]}
优化说明
- 原代码中每次调用
index查找表头索引会产生额外遍历开销,改用enumerate提前记录索引可以把时间复杂度从O(n²)降低到O(n) - 列表分片的执行效率高于手动循环拼接子列表,同时代码可读性更高
zip(*可迭代对象)是Python原生的序列转置方法,执行效率远高于手动嵌套循环遍历
内容的提问来源于stack exchange,提问作者Saad Hasan
相关产品推荐
相关产品推荐

