在python中使用字典的值筛选字典列表
我有一个字典列表,我想过滤并创建一个对应于列表值的向量。该列表文件包含多个条目,其中每个条目都有一个字段在python中使用字典的值筛选字典列表,python,json,Python,Json,我有一个字典列表,我想过滤并创建一个对应于列表值的向量。该列表文件包含多个条目,其中每个条目都有一个字段时间、项目、状态:{values1、value2、value3}。变量项可以采用以下11个值[0.0、0.1、0.2、0.3…1.0]。对于每个元素的值,我希望找到相应的value3值,并创建一个包含11个元素的向量,其中每个元素都应对应于相关项变量的value3。例如,如果我的列表是: my_json = [{'time': datetime.datetime(2018, 7, 4, 13,
时间、项目、状态:{values1、value2、value3}
。变量项
可以采用以下11个值[0.0、0.1、0.2、0.3…1.0]
。对于每个元素的值,我希望找到相应的value3
值,并创建一个包含11个元素的向量,其中每个元素都应对应于相关项
变量的value3
。例如,如果我的列表是:
my_json = [{'time': datetime.datetime(2018, 7, 4, 13, 42, 55, 613000), 'item': 0.3, 'state': {'value1': 0.0, 'value2': 0.167, 'value3': 0.833}}
{'time': datetime.datetime(2018, 7, 6, 9, 40, 54, 44000), 'item': 0.6, 'state': {'value1': 0.0, 'value2': 0.273, 'value3': 0.727}}
{'time': datetime.datetime(2018, 7, 6, 10, 0, 16, 507000), 'item': 0.5, 'state': {'value1': 0.0, 'value2': 0.0, 'value3': 1.0}}
{'time': datetime.datetime(2018, 7, 6, 10, 37, 16, 769000), 'item': 0.5, 'state': {'value1': 0.0, 'value2': 0.0, 'value3': 1.0}}
{'time': datetime.datetime(2018, 7, 6, 10, 38, 28, 948000), 'item': 0.5, 'state': {'value1': 0.0, 'value2': 0.143, 'value3': 0.857}}
{'time': datetime.datetime(2018, 7, 6, 10, 41, 11, 201000), 'item': 0.4, 'state': {'value1': 0.0, 'value2': 0.091, 'value3': 0.909}}
{'time': datetime.datetime(2018, 7, 6, 11, 45, 25, 145000), 'item': 0.1, 'state': {'value1': 0.0, 'value2': 0.083, 'value3': 0.917}}
{'time': datetime.datetime(2018, 7, 6, 11, 46, 31, 508000), 'item': 0.1, 'state': {'value1': 0.0, 'value2': 0.0, 'value3': 1.0}}
{'time': datetime.datetime(2018, 7, 6, 11, 46, 33, 120000), 'item': 0.1, 'state': {'value1': 0.0, 'value2': 0.214, 'value3': 0.786}}
{'time': datetime.datetime(2018, 7, 6, 12, 36, 25, 695000), 'item': 0.0, 'state': {'value1': 0.0, 'value2': 0.0, 'value3': 1.0}}
{'time': datetime.datetime(2018, 7, 6, 12, 37, 35, 721000), 'item': 0.0, 'state': {'value1': 0.0, 'value2': 0.0, 'value3': 1.0}}]
上述示例的期望输出是:
[1.0,0.76,0.0,0.833,0.909,0.857,0.727,0.0,0.0,0.0,0.0]
,考虑到时间,该输出也保留了最新的值(当存在多个项目值时)。我尝试使用if-else语句来解决它,但是,我想要一个更优雅的解决方案。创建一个字典,其键是项
值。循环执行my_json
,将value3
分配给相应的元素
d = {}
for i in my_json:
d[i['item']] = i['state']['value3']
我假设列表已经按时间戳排序;如果没有,请先对列表排序。创建一个字典,其键为
项
值。循环执行my_json
,将value3
分配给相应的元素
d = {}
for i in my_json:
d[i['item']] = i['state']['value3']
我假设列表已经按时间戳排序;如果没有,请先对列表进行排序。我扩展了上述解决方案,以包括按时间排序,以备需要
sorted_list = sorted(my_json, key=lambda k: k['time'])
d = {}
for i in sorted_list:
d[i['item']] = i['state']['value3']
我扩展了上述解决方案,以包括按时间排序,以防需要
sorted_list = sorted(my_json, key=lambda k: k['time'])
d = {}
for i in sorted_list:
d[i['item']] = i['state']['value3']
你能举一个你尝试过但没有成功的例子吗?我尝试过实现if-else逻辑,但如果可能的话,我会做一些更优雅的事情。那不是一个有效的JSON文件。如果JSON文件中有多个对象,则需要将它们包装在一个数组中。JSON还需要在字符串周围加双引号,而不是单引号,并且不允许函数调用。@Barmar它前面也没有
my_JSON=
。我想这就是解析后的json:PCan你能举一个你尝试过但没有成功的例子吗?我尝试过实现if-else逻辑,但如果可能的话,我会做一些更优雅的东西。这不是一个有效的json文件。如果JSON文件中有多个对象,则需要将它们包装在一个数组中。JSON还需要在字符串周围加双引号,而不是单引号,并且不允许函数调用。@Barmar它前面也没有my_JSON=
。我想这就是解析后的json:P