4 回答
TA贡献1845条经验 获得超8个赞
使用shlex
:
import shlexdict(i.split(":") for i in shlex.split(query))
输出:
{'age': '25', 'company': 'Big Company, LLC', 'name': 'Thoong'}
TA贡献1804条经验 获得超3个赞
使用正则表达式并插入到字典中:
import re
regex_1 = r"(\w+:\w+)"
regex_2 = r"(\w+:\"\w+\s\w+,\s\w+\")"
query = 'name:Thoong company:"Big Company, LLC" age:25'
r_1 = re.findall(regex_1, query)
r_2 = re.search(regex_2, query).group(1)
d = {*r_1,
r_2}
print(d)
返回:
{'name:Thoong', 'age:25', 'company:"Big Company, LLC"'}
TA贡献1784条经验 获得超8个赞
这个怎么样?这看起来并不优雅,但您可以轻松理解这段代码的作用。
query = 'name:Thoong company:"Big Company, LLC" age:25'
tmp = query.split(":")
keys = []
values = []
# extract keys
for t in tmp:
_t = t.split(" ")
if len(_t) == 1:
keys.append(_t[0])
else:
values.append(" ".join(_t[:-1]))
keys.append(t.split(" ")[-1])
values.append(keys[-1])
del keys[-1]
result = {k: v for k, v in zip(keys, values)}
print(result)
TA贡献1815条经验 获得超6个赞
拆分空格 ( ) 和其他符号可能不起作用,因为名称可能包含任意数量的字符。
如果查询总是由这三个元素组成,您可以尝试在关键字处拆分:
d = {'name': query.split('name:')[1].split(' company:')[0],
'company': query.split('company:')[1].split(' age:')[0],
'age': query.split('age:')[1]}
但是,如果查询格式错误,这将不起作用。在那里,您可能必须尝试解析它并转义出现在引号内的空格和冒号。
添加回答
举报