【问题标题】:Convert string representation of dictionary into dictionary [duplicate]将字典的字符串表示形式转换为字典[重复]
【发布时间】:2021-12-01 06:56:16
【问题描述】:

我想把一个字符串转换成字典。我试过evalliteral_eval 都不起作用,因为键没有引号。

str_to_convert = "{rpd.col_A : 'Type B', rpd_dev : 'Other, specify', rpd_form : 'Other'}"

请注意rpd_dev: 'Other, specify',字符串中有逗号需要保留。 如何在 python 中实现这一点?

【问题讨论】:

  • 你从哪里得到这个字符串?
  • 原始字符串是“if ('rpd.col_A' == 'Type B') AND ('rpd_dev' == 'Other') AND ('rpd_form' == 'Other')”我已经设法将其转换为上述格式
  • 请不要发送不相关的标签

标签: python string dictionary


【解决方案1】:

您可以使用一些 AST-lib 对其进行解码 - 例如 ast.literal_eval 为 here 或使用 json - 如 here

【讨论】:

    【解决方案2】:

    我认为你可以使用yaml 来处理类似的事情,只需要删除大括号和逗号。

    import yaml
    
    str_to_convert = "{rpd.col_A : 'Type B', rpd_dev : 'Other', rpd_form : 'Other'}"
    res = yaml.load(str_to_convert.replace(", ", "\n").strip("{}"), Loader=yaml.FullLoader)
    print(res)
    

    输出

    {'rpd.col_A': 'Type B', 'rpd_dev': 'Other', 'rpd_form': 'Other'}
    

    注意

    yaml是第三方模块,需要运行安装:

    pip install pyyaml
    

    【讨论】:

      【解决方案3】:

      例如,要将其加载为 JSON,您需要在每个键和值周围加上双引号 ",最简单的方法似乎是使用正则表达式

      import re
      
      str_to_convert = "{rpd.col_A : 'Type B', rpd_dev : 'Other', rpd_form : 'Other'}"
      result = re.findall(r"([\w.]+)\s*:\s*'([\w\s]+)'", str_to_convert)
      print(dict(result))  # {'rpd.col_A': 'Type B', 'rpd_dev': 'Other', 'rpd_form': 'Other'}
      

      【讨论】:

      • 我有一种情况,其中 rpd_form : 'Other, specify' 上面的代码在这种情况下失败了,因为字符串中有一个逗号,我该如何解决?
      • 更改为([\w.]+)\s*:\s*'([\w,\s]+)'([\w.]+)\s*:\s*'(.+?)'
      猜你喜欢
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 2019-12-05
      • 1970-01-01
      相关资源
      最近更新 更多