从括号中解析值并在python中创建字典

时间:2018-03-16 15:05:22

标签: python regex dictionary

我有一个字符串key1(value1) key2(vallue2) key3(value3) key4(value4) key5(value5) k,并希望将它们提取到字典中,如下所示。我能够分别提取括号内外的值,但不能在python中关联和创建字典。请协助。

result = {

    "key1" : "value1",
    "key2" : "value2",
    "key3" : "value3",
    "key4" : "value4",
    "key5" : "value5",
}

3 个答案:

答案 0 :(得分:1)

See code in use here

import re

s = "key1(value1) key2(vallue2) key3(value3) key4(value4) key5(value5) k"
r = re.findall(r"(\w+)\(([^)]+)", s)

print(dict(zip([x[0] for x in r], [x[1] for x in r])))

结果:

{'key1': 'value1', 'key2': 'vallue2', 'key3': 'value3', 'key4': 'value4', 'key5': 'value5'}

答案 1 :(得分:0)

  1. 您的键值对显然是以它们之间的序列') '分隔的,因此re.split()是第一步的不错选择,'\)\s\+'作为模式。并且记得首先修剪尾随'),以免损坏最后一个值。

  2. 当你在正则表达式上拆分字符串时,只需遍历结果列表并将每个键值对推入字典中。字符串的split()方法可用于将列表项拆分为键值对,'('作为分隔符(而maxsplit 1,因为您不希望更多的开头括号在项目中。

答案 2 :(得分:0)

使用regex的解决方案:

import re

s = "key1(value1) key2(value2) key3(value3) key4(value4) key5(value5)"

keys = re.findall(r"([A-Za-z0-9_]+)\(", s)
values = re.findall(r"\(([A-Za-z0-9_]+)\)", s)

result = {k: v for k, v in zip(keys, values)}
print(result)

# {'key1': 'value1', 
# 'key2': 'value2',
# 'key3': 'value3', 
# 'key4': 'value4', 
# 'key5': 'value5'}