Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用空格分隔符将字符串拆分为字典_Python_Python 2.7 - Fatal编程技术网

Python 使用空格分隔符将字符串拆分为字典

Python 使用空格分隔符将字符串拆分为字典,python,python-2.7,Python,Python 2.7,我有一个像这样的Python字符串 query = 'name:Thoong company:"Big Company, LLC" age:25' 我想把它转换成一个键值被“:”分割的字典 { 'name': 'Thoong', 'age': 25, 'company': 'Big Company, LLC', } 我试图按'进行拆分,然后按':'进行拆分。但是似乎查询.split(“”)不起作用,因为我们有'“大公司,有限责任公司” 是否有任何方

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

query = 'name:Thoong company:"Big Company, LLC" age:25'
我想把它转换成一个键值被“:”分割的字典

{
    'name': 'Thoong',
    'age': 25,
    'company': 'Big Company, LLC',
}
我试图按
'
进行拆分,然后按
':'
进行拆分。但是似乎
查询.split(“”)
不起作用,因为我们有
'
“大公司,有限责任公司”

是否有任何方法可以将其存档,可以使用正则表达式?

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

如果查询始终包含这三个元素,则可以尝试在关键字处拆分:

d = {'name': query.split('name:')[1].split(' company:')[0],
     'company': query.split('company:')[1].split(' age:')[0],
     'age': query.split('age:')[1]}
但是,如果查询的格式不正确,这将不起作用。在这里,您可能必须尝试解析它,并转义引号中出现的空格和冒号。

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

如果查询始终包含这三个元素,则可以尝试在关键字处拆分:

d = {'name': query.split('name:')[1].split(' company:')[0],
     'company': query.split('company:')[1].split(' age:')[0],
     'age': query.split('age:')[1]}
但是,如果查询的格式不正确,这将不起作用。在这里,您可能必须尝试解析它并转义引号中出现的空格和冒号。

使用:

输出:

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

输出:

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

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

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)
这个怎么样? 这看起来并不优雅,但您很容易理解这段代码的作用

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)