再次使用Python过滤字典

bob*_*nto 1 python dictionary filter

是的,这个网站上有很多关于装配python字典的问题.但是我所看到的一切都没有达到我想做的事情.所以,我有一本字典.它包含一些列表和一些数据值列表.就像是

data_and_time = {"time":['2:30','2:45','3:25','5:15','7:21','8:22'],
                 "data":[    5.,    7.,    2.,    3.,    8.,   10.]}
Run Code Online (Sandbox Code Playgroud)

我想过滤这个,例如,我只有大于或等于5的数据值.结果是:

data_and_time_5 = {"time":['2:30','2:45','7:21','8:22'],
                   "data":[    5.,    7.,    8.,   10.]}
Run Code Online (Sandbox Code Playgroud)

我可以想到几种方法来做到这一点 - 所有这些都非常难看并且需要多行代码.我想要一种优雅,可读的方式来做到这一点.python词典有这样的方法吗?(顺便说一下,时间表示为字符串是完全偶然的,这只是我在这里表达问题的一种紧凑方式.)谢谢.

Ble*_*der 5

我首先将数据存储为更好的,类似JSON的格式:

data = [dict(zip(data_and_time, val)) for val in zip(*data_and_time.values())]
Run Code Online (Sandbox Code Playgroud)

它看起来像这样:

>>> data
    [{'data': 5.0, 'time': '2:30'},
 {'data': 7.0, 'time': '2:45'},
 {'data': 2.0, 'time': '3:25'},
 {'data': 3.0, 'time': '5:15'},
 {'data': 8.0, 'time': '7:21'},
 {'data': 10.0, 'time': '8:22'}]
Run Code Online (Sandbox Code Playgroud)

现在,您可以更轻松地过滤对象:

>>> [item for item in data if item['data'] >= 5.0]
    [{'data': 5.0, 'time': '2:30'},
 {'data': 7.0, 'time': '2:45'},
 {'data': 8.0, 'time': '7:21'},
 {'data': 10.0, 'time': '8:22'}]
Run Code Online (Sandbox Code Playgroud)