【问题标题】:Parsing values from string into dictionary将字符串中的值解析为字典
【发布时间】:2021-09-11 04:27:12
【问题描述】:

假设我有字符串 y,我正在尝试提取子字符串以转换为由 = 分隔的字典。

y = '''

Cat ID=456789       Cat Name=Cosmo           Home=Tree\n

Cat ID=567890       Cat Name=Winksie           Role=Cute\n

'''

[
    {
        "Cat ID": "456789",
        "Cat Name": "Cosmo"
        "Home": "Tree"
    },
    {
        "Cat ID": "567890",
        "Cat Name": "Winksie"
        "Role": "Cute"
    }
] 

【问题讨论】:

  • 你有什么问题?
  • 他的问题更多是关于正则表达式而不是字典。
  • teshtalks,我认为您可能想暂时关闭问题以查看面向正则表达式的问题/答案。我认为您需要了解如何使用“re”模块提取文本。
  • 对不起,这个问题和 JSON 有什么关系?你似乎想创建一个dict...

标签: python json string


【解决方案1】:

这个正则表达式应该选择 key=value 对。

[ ]?.*?=.*?[ \n]

[ ]? 0 或 1 个空格

.*?= 任意数量的任意字符,直到第一次遇到 =

.*?[ \n] 任意数量的任意字符,直到第一次遇到空格或 \n

【讨论】:

    【解决方案2】:

    没有正则表达式也可以做到:

    lst = []
    for line in [line for line in y.split('\n') if line]:
        record = dict(it.split("=") for item in line.split("  ") if (it := item.strip()))
        lst.append(record)
    print(lst)
    

    它给出:

    [{'Cat ID': '456789', 'Cat Name': 'Cosmo', 'Home': 'Tree'}, 
     {'Cat ID': '567890', 'Cat Name': 'Winksie', 'Role': 'Cute'}]
    

    或者,使用正则表达式:

    lst = [dict(re.findall(r"(\w[\w ]+)=(\w+)", line)) for line in y.split("\n") if line]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多