Python数组迭代追加字典元素的更高效替代方案
问题背景
处理长度在1000到10000之间的多个等长数组,需要返回名为points的数组,数组每个元素为字典结构。希望找到类似pandas数据框.loc方法的列规则设置实现,避免使用迭代追加的方式生成目标数组。
当前实现代码
times = [000000001, 000034000, ...] highs = [2, 1, ...] lows = [-2, -3, ...] points = [] for i in range(0, len(times)): points.append({"time": times[i], "low": lows[i], "high": highs[i]})
现有参考方案
之前看到用pandas构造数据框的思路:
import pandas as pd df = pd.DataFrame({"time": times, "low": lows, "high": highs})
该方案生成的数据框格式如下:
Time High Low 0 100000001 1 -1 1 100000002 3 -4 2 100000003 4 -5
可落地的实现方案
pandas方案(适合已引入pandas依赖的场景)
不需要手动写循环,在构造完数据框后直接调用to_dict('records')方法即可一键生成符合要求的points数组,同时支持你需要的.loc列操作规则,可先完成列值修改、行过滤等操作后再转换结果,在数据量上万的场景下性能远高于原生Python循环:import pandas as pd df = pd.DataFrame({"time": times, "low": lows, "high": highs}) # 此处可正常使用df.loc完成各类列/行操作 points = df.to_dict('records')原生Python方案(无第三方依赖)
不需要额外安装库,用zip配对数组对应元素配合列表推导实现,写法比显式循环追加更简洁,性能也略高于原有实现:points = [{"time": t, "low": l, "high": h} for t, l, h in zip(times, lows, highs)]
内容的提问来源于stack exchange,提问作者jros
相关产品推荐
相关产品推荐

