我有字典
[{
'bytesUsed': 79095,
'servicePlan': '25MB',
'smsUsed': 0,
'source': 'Raw Usage',
'timestamp': '2019-02-28T19:00:00-05:00'
}, {
'bytesUsed': 310435,
'servicePlan': '25MB',
'smsUsed': 0,
'source': 'Raw Usage',
'timestamp': '2019-04-01T19:00:00-05:00'
}, {
'bytesUsed': 286033,
'servicePlan': '25MB',
'smsUsed': 0,
'source': 'Raw Usage',
'timestamp': '2019-05-06T19:00:00-05:00'
}]
如果timestamp
字段不在范围内,我想过滤dict(2019-02-11T19:00:00-05:00-2019-04-10T19:00:00-05:00 )并创建
{'2019-02-28T19:00:00-05:00' : 79095, '2019-04-01T19:00:00-05:00' : 310435}
什么是有效的方法?
目前,我正在为&if在列表中的每个字典上这样做,这很耗时。
答案 0 :(得分:1)
我猜到你想得到什么。不幸的是,您的预期输出不清楚。
我一直是dateutil模块的粉丝。
from dateutil.parser import parse
dt1 = parse("2019-02-11T19:00:00-05:00")
dt2 = parse("2019-04-10T19:00:00-05:00")
newdl = []
for dic in dictlist:
dt = parse(dic['timestamp'])
if dt1 <= dt <= dt2:
newdl.append({dic['timestamp'] : dic['bytesUsed']})
print(newdl)
输出:
[{'2019-02-28T19:00:00-05:00': 79095}, {'2019-04-01T19:00:00-05:00': 310435}]
如果您认为您将要再次使用日期时间,则将dt
设为键而不是字符串;这样可以避免以后再解析该字符串。
尽管我会小心地使用任何日期(字符串或日期时间)作为字典键,除非您可以保证它们始终是唯一的。
答案 1 :(得分:1)
尝试一下
from dateutil.parser import parse
start_dt = parse("2019-02-11T19:00:00-05:00")
end_dt = parse("2019-04-10T19:00:00-05:00")
arr = [
{
'bytesUsed': 79095,
'servicePlan': '25MB',
'smsUsed': 0,
'source': 'Raw Usage',
'timestamp': '2019-02-28T19:00:00-05:00'
},
{
'bytesUsed': 310435,
'servicePlan': '25MB',
'smsUsed': 0,
'source': 'Raw Usage',
'timestamp': '2019-04-01T19:00:00-05:00'
},
{
'bytesUsed': 286033,
'servicePlan': '25MB',
'smsUsed': 0,
'source': 'Raw Usage',
'timestamp': '2019-05-06T19:00:00-05:00'
}
]
result = {i['timestamp']: i['bytesUsed'] for i in arr if start_dt <= parse(i['timestamp']) <= end_dt}
print(result)
输出:
{'2019-02-28T19:00:00-05:00': 79095, '2019-04-01T19:00:00-05:00': 310435}
如果您没有dateutil
模块,可以使用pip install python-dateutil
命令来实现。确实没有得到您的输出,如果这不是您期望的,请在此答案中添加评论。