Python过滤并从di列表创建dict

2024-07-03 07:43:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份口述清单

[{
    '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字段不在范围内(2019-02-11T19:00:00-05:00-2019-04-10T19:00:00-05:00),我想过滤掉dict并创建关键字:值映射就像

{'2019-02-28T19:00:00-05:00' : 79095, '2019-04-01T19:00:00-05:00' : 310435} 

做这件事的有效方法是什么?你知道吗

目前我正在为列表中的每个dict做if,这很费时。你知道吗


Tags: 方法source列表rawifserviceusage关键字
2条回答

我猜你想得到什么。不幸的是,您的预期输出不清楚。你知道吗

我一直是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}]

如果您认为要再次使用datetimes,我会将dt作为键而不是字符串;这样可以避免以后再次解析字符串。你知道吗

尽管我会小心地使用任何类型的日期(字符串或日期时间)作为字典键,除非你能保证它们总是唯一的。你知道吗

试试这个

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}

如果没有^{}模块,可以使用pip install python-dateutil命令调用isntall。真的没有得到你的输出,如果这不是你所期望的,请添加一个评论这个答案。你知道吗

相关问题 更多 >