Python:如何无for循环高效移除字典列表中时间戳不达标的元素
问题描述
我有如下字典列表:
[ { 'timestamp': 1677231711722, 'instrument_name': 'BTC-30JUN23-8000-P', 'index_price': 23845.81, 'direction': 'buy', 'amount': 27.0 }, { 'timestamp': 1677231711722, 'instrument_name': 'BTC-30JUN23-8000-P', 'index_price': 23845.81, 'direction': 'buy', 'amount': 2.4 }, { 'timestamp': 1677231702010, 'instrument_name': 'BTC-25FEB23-27000-C', 'index_price': 23844.34, 'direction': 'buy', 'amount': 0.1 } ]
另有一个时间戳值:
1677228369641
该值由以下代码生成:
old_time = round((datetime.datetime.now(timezone.utc) - timedelta(hours=1)).timestamp() * 1000)
我希望对比字典中的timestamp与old_time,移除所有timestamp小于old_time的字典元素,如何不使用显式for循环高效实现此需求?
解决方案
1. 列表推导式(推荐,简洁高效)
Python的列表推导式底层基于C实现,执行效率远高于显式for循环,写法也更紧凑:
filtered_data = [item for item in data_list if item['timestamp'] >= old_time]
2. filter()函数结合lambda
filter()是内置的高阶函数,同样经过底层优化,适合快速过滤序列:
filtered_data = list(filter(lambda x: x['timestamp'] >= old_time, data_list))
3. Pandas矢量化处理(大数据量场景)
如果你的字典列表规模很大(比如十万条以上),Pandas的矢量化操作能带来数量级的效率提升:
import pandas as pd # 转换为DataFrame df = pd.DataFrame(data_list) # 矢量化过滤 filtered_df = df[df['timestamp'] >= old_time] # 转回字典列表 filtered_data = filtered_df.to_dict('records')
内容的提问来源于stack exchange,提问作者Madan
相关产品推荐
相关产品推荐

