python - 如何在递归中使用正则表达式
问题描述
input = '''name Jhon age 30
name John bp 130 90
name Rick age 80
name Rick bp 110 70'''
我有一个像上面那样的字符串。
我需要将其作为字典列表
[
{
"name": "John",
"age" : 30,
"bp_sys" : 130,
"bp_dia" : 90
},
{
"name": "Rick",
"age" : 80,
"bp_sys" : 110,
"bp_dia" : 70
}
]
我在下面尝试过 - 按行拆分输入并在每行上应用正则表达式
for line in input.split("\n"):
print re.findall(r'name (.*?) age (.*?)', line)
它打印[('John', '')]
第一行的内容
还有什么简单的方法吗?
解决方案
使用groupby
来自 itertools 和正则表达式。
演示:
from itertools import groupby
import re
inputVal = '''name John age 30
name John bp 130 90
name Rick age 80
name Rick bp 110 70'''
inputVal = inputVal.splitlines()
res = []
for key, group in groupby(inputVal, lambda x: re.findall(r'(?<=name\s).*?(?=\s)', x)[0]):
d = {"name": key}
for i in group:
if "age" in i:
val = i.split()
d["age"] = int(val[-1])
if "bp" in i:
val = i.split()
d["bp_sys"] = int(val[-2])
d["bp_dia"] = int(val[-1])
res.append(d)
print(res)
输出:
[{'age': 30, 'bp_sys': 130, 'name': 'John', 'bp_dia': 90}, {'age': 80, 'bp_sys': 110, 'name': 'Rick', 'bp_dia': 70}]
- 我使用名称作为键。例如:
'John'
,'Rick'
推荐阅读
- python - 为什么我的二分搜索比线性搜索慢?
- java - 为什么我不能创建泛型类的泛型 arraylist 成员?
- python - 自动将图像转换为对象的相同位置
- node.js - 运行多个 Nodejs 副本破坏了我的对象数据
- javascript - 用户登录或注销后重新渲染标题反应
- python - 如何在 Python3 中使用 PGPY 加密消息
- c++ - 为什么我的 Callable 没有从 Lambda 内部调用?
- python-3.x - 为什么我的 Curl 命令在 docker 容器中失败
- reactjs - 如何使用 React.js + Django Rest Framework 保存带有表单提交的 blob 文件
- kdb - (KDB+/q) 获取矩阵的对角元素