用空格分隔符将字符串拆分成字典

问题描述

我有一个像这样的Python字符串

query = 'name:Thoong company:"Big Company,LLC" age:25'

我想将其转换为带有键和值的字典,并用':'分隔

{
    'name': 'Thoong','age': 25,'company': 'Big Company,LLC',}

我尝试先分解' ',然后再分解':'。但似乎query.split(' ')不起作用,因为我们有' ' "Big Company,LLC"

是否可以使用正则表达式将其存档?

解决方法

使用shlex

import shlex

dict(i.split(":") for i in shlex.split(query))

输出:

{'age': '25','company': 'Big Company,LLC','name': 'Thoong'}
,

使用正则表达式并插入字典:

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"'}
,

这个怎么样? 这看起来并不优雅,但是您可以轻松理解这段代码的作用。

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)
,

分隔空格( )和其他符号可能不起作用,因为名称可能包含任意数量的字符。

如果查询始终由这三个元素组成,则可以尝试分割关键字:

d = {'name': query.split('name:')[1].split(' company:')[0],'company': query.split('company:')[1].split(' age:')[0],'age': query.split('age:')[1]}

但是,如果查询的格式不正确,则将无法使用。在那里,您可能必须尝试对其进行解析,以避开引号内出现的空格和冒号。