Skip to main content
 首页 » 编程设计

python之遍历python中的字典列表

2025年05月04日20xiaohuochai

我有一个 python 字典列表,格式如下:

[{'item_value': 0.1, 'date': datetime.datetime(2017, ...), 'item_index': 1.0},  
{'item_value': 0.22, 'date': datetime.datetime(2016, ...), 'item_index': 0.1},  
{'item_value': 0.21, 'date': datetime.datetime(2016, ...), 'item_index': 1.0} 
 ,...,  
{'item_value': 1.03, 'date': datetime.datetime(2016, ...), 'item_index': 1.0}] 

变量 item_index 取值:[0.0, 0.1, 0.2, ..., 1.0] 而变量 item_value 值介于 [-1 , 1].我想构建一个 numpy 向量,其中包含所有可能的 item_index 和最近的 item_value 使用日期(通过省略具有相同 item_value 和保留最新的)。

我正在使用建议的解决方案:

np.array([d["item_value"] for d in sorted(my_list, key=lambda x: x["date"]))} 

我创建了一个 numpy 向量,其中包含按照日期 [1.03, 0.22, 0.21, 0.1] 排序的所有 item_values 示例。但是,我想返回一个向量,如下例所示:

[0, 0.22, 0, 0, 0, 0, 0, 0, 0, 0.1] 

向量的每个位置表示 item_index 的 11 个可能值,并将 item_value 的最新值作为值。我该怎么做?

编辑

一个例子可以是:

[{'item_value': 0.0, 'date': datetime.datetime(2017, 10, 11, 13, 39, 36, 979000), 'item_index': 1.0} 
{'item_value': 0.0, 'date': datetime.datetime(2017, 10, 11, 13, 40, 2, 368000), 'item_index': 1.0} 
{'item_value': -1.0, 'date': datetime.datetime(2017, 10, 23, 9, 35, 20, 741000), 'item_index': 1.0} 
{'item_value': -1.0, 'date': datetime.datetime(2017, 10, 23, 9, 35, 41, 915000), 'item_index': 0.8} 
{'item_value': 0.0, 'date': datetime.datetime(2017, 10, 23, 9, 36, 2, 763000), 'item_index': 0.5} 
{'item_value': 0.0, 'date': datetime.datetime(2017, 10, 23, 11, 40, 22, 427000), 'item_index': 1.0} 
{'item_value': 0.0, 'date': datetime.datetime(2017, 11, 14, 7, 33, 9, 131000), 'item_index': 1.0} 
{'item_value': 0.51, 'date': datetime.datetime(2017, 11, 15, 12, 50, 25, 14000), 'item_index': 1.0} 
{'item_value': 0.0, 'date': datetime.datetime(2018, 1, 19, 14, 15, 46, 761000), 'item_index': 1.0} 
{'item_value': -0.49, 'date': datetime.datetime(2018, 1, 19, 14, 16, 30, 207000), 'item_index': 1.0} 
{'item_value': -0.009000000000000005, 'timestamp': datetime.datetime(2018, 1, 19, 16, 32, 30, 631000), 'item_index': 1.0} 
{'item_value': 0.0, 'date': datetime.datetime(2018, 1, 19, 16, 33, 19, 509000), 'item_index': 1.0} 
{'item_value': 0.0, 'date': datetime.datetime(2018, 1, 19, 16, 44, 59, 483000), 'item_index': 1.0} 
{'item_value': -0.33299999999999996, 'date': datetime.datetime(2018, 1, 19, 18, 13, 17, 67000), 'item_index': 1.0} 
{'item_value': 1.0, 'date': datetime.datetime(2018, 1, 19, 18, 13, 48, 443000), 'item_index': 1.0} 
{'item_value': -0.33299999999999996, 'date': datetime.datetime(2018, 1, 19, 18, 14, 22, 871000), 'item_index': 1.0} 
{'item_value': 0.0, 'date': datetime.datetime(2018, 1, 28, 11, 45, 48, 223000), 'item_index': 1.0} 
{'item_value': 0.005000000000000003, 'timestamp': datetime.datetime(2018, 1, 28, 11, 46, 7, 481000), 'item_index': 1.0} 
{'item_value': 0.0, 'date': datetime.datetime(2018, 1, 28, 11, 46, 27, 845000), 'item_index': 1.0} 
{'item_value': 0.0, 'date': datetime.datetime(2018, 1, 28, 11, 46, 50, 386000), 'item_index': 1.0}] 

请您参考如下方法:

oneliner 可以如下所示:

indexes = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0] 
 
my_filtered_lists = [sorted([d for d in my_list if d['item_index'] == i],  
                            key=lambda x: x["date"]) 
                        for i in indexes ] 
 
result = [l[-1]['item_value'] if len(l)>0 else 0  for l in my_filtered_lists] 

对于每个索引,您过滤列表,并根据需要对每个过滤列表进行排序,并获取最后一个元素的 item_value。 如果数据集足够大,这可能需要一点内存,因为您要为每个 item_idex 创建一个额外的列表。

测试:

 my_list = [ 
{'item_value': 0.1, 'date': datetime.datetime(2017, 05, 01), 'item_index': 1.0},  
{'item_value': 0.22, 'date': datetime.datetime(2016,05,01), 'item_index': 0.1},  
{'item_value': 0.21, 'date': datetime.datetime(2017, 05, 01), 'item_index': 0.1}, 
{'item_value': 1.03, 'date': datetime.datetime(2016,05,01), 'item_index': 1.0}] 

它返回:[0, 0.21, 0, 0, 0, 0, 0, 0, 0, 0, 0.1] 据我所知这是预期的输出。