用正则表达式模式理解Python词典

2024-06-07 03:09:06 发布

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

我只是在用Python和Regex练习基本的web抓取

我想写一个函数,以string对象作为输入,返回一个字典,其中每个键都是字符串形式的日期,比如'2017-01-23'(不带引号tho);对应的每个值都是支持率,存储为浮点数。你知道吗

以下是输入对象(数据)的外观:

如您所见,每个记录(每天)用{}表示,每个关键词:价值模式后跟','

{"date":"2017-01-23","future":false,"subgroup":"All polls","approve_estimate":"45.46693",  
 "approve_hi":"50.88971","approve_lo":"40.04416","disapprove_estimate":"41.26452",
"disapprove_hi":"46.68729","disapprove_lo":"35.84175"},
{"date":"2017-01-24","future":false,"subgroup":"All polls" 
...................

以下是日期的正则表达式模式:

date_pattern = r'\d{4}-\d{2}-\d{2}'

用这个

date_pattern = r'\d{4}-\d{2}-\d{2}'
date_matcher = re.compile(date_pattern)
date_matches = matcher.findall(long_string) #list of all dates in string

但对于实际的支持率值,这不起作用,因为我不是在寻找匹配项,而是在这个示例中,后面的数字是45.46693。你知道吗

approve_pattern = r'approve_estimate\":'
#float(re.sub('[aZ]','',re.sub('["]','',re.split(approve_pattern, data) [1])))

approve\u模式的问题是一次只能获取一个值。那么,如何对整个数据执行此操作,并将批准评级值存储为float?你知道吗

另外,我只想保留“future”:false放弃预测值的记录,并且只保留带有“future”:true的值。你知道吗

请假设所有遇到的日期都有有效的批准估计数。你知道吗

下面是所需的输出

date_matches=['2018-01-01','2018-01-02','2018-01-03'] # "future":true filtered out
approve_matches=[47.1,47.2,47.9]

final_dict = {k:v for k,v in zip(date_matches,approve_matches)}

final_dict #Desired Output {'2018-01-01': 47.1, '2018-01-02': 47.2, '2018-01-03': 47.9}

Tags: 数据对象refalsedatestring记录模式
1条回答
网友
1楼 · 发布于 2024-06-07 03:09:06

您的数据看起来非常像JSON,只是它必须用括号括起来才能形成一个数组。您应该使用JSON解析器(例如json.loads)来读取它。你知道吗

假设s是您的原始字符串。然后在字典中生成以下表达式:

final_dict = {record['date']: record['approve_estimate'] 
              for record in json.loads("[" + s + "]") 
              if record['future']}
# Empty in your case

相关问题 更多 >