【问题标题】:Parse values from parentheses and create dictionary in python [closed]从括号中解析值并在python中创建字典[关闭]
【发布时间】:2018-03-16 15:05:22
【问题描述】:

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

result = {

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

【问题讨论】:

  • 你有尝试过吗?你在哪里卡住了,什么对你不起作用?
  • 你能分享一下你能够“分别提取括号内外的值”的代码吗?
  • 我在下面使用了单独的正则表达式来分别获取键和值。但它不知道如何将它们结合起来。对于键:re.sub(r"(.*?)\s?(.*?)", r"\1", s) 对于值:re.findall(r'(.*?)',s)

标签: python regex dictionary


【解决方案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'}

【讨论】:

  • 谢谢。它工作得很好
【解决方案2】:
  1. 您的键值对显然是用它们之间的序列') ' 分隔的,所以re.split() 是第一步的不错选择,'\)\s\+' 作为模式。并记住首先修剪尾随的 ')',以免损坏最后一个值。

  2. 当您在该正则表达式上拆分字符串时,只需遍历结果列表并将每个键值对推送到字典中即可。 String 的 split() 方法可用于将列表项拆分为以 '(' 为分隔符的键值对(以及 maxsplit 1,因为您不希望在项目中再出现左括号)。

【讨论】:

    【解决方案3】:

    使用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'}                       
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      相关资源
      最近更新 更多