【问题标题】:parsing string to a dict [duplicate]将字符串解析为字典 [重复]
【发布时间】:2009-10-18 16:12:48
【问题描述】:

我有一个字符串输出,它是 dict ex 的形式。

{'key1':'value1','key2':'value2'} 

如何轻松地将其保存为字典而不是字符串?

【问题讨论】:

  • 这在上一个问题988228中得到了很好的回答
  • 什么?为什么不将 dict 保存为 dict 而不是首先创建字符串?请就此提供更多背景信息。这个问题没有多大意义,并表明更大更深的问题可能导致了这一点。
  • 正如 Dave 所指出的,stackoverflow.com/questions/988228/… 与此完全相同

标签: python string parsing eval abstract-syntax-tree


【解决方案1】:

astr 是一个“以字典的形式”的字符串。 ast.literal_eval 将其转换为 python dict 对象。

In [110]: import ast

In [111]: astr="{'key1':'value1','key2':'value2'}"

In [113]: ast.literal_eval(astr)
Out[113]: {'key1': 'value1', 'key2': 'value2'}

【讨论】:

  • 请注意,如果astr 有任何方法可以包含os.remove("foo"),那么使用eval 并不是一个好主意。
【解决方案2】:

如果您使用的是 Python 2.6+,这是最好的选择,因为它不受 eval 中的安全漏洞的影响。

import ast

s = """{'key1':'value1','key2':'value2'}"""
d = ast.literal_eval(s)

【讨论】:

  • 你搞砸了引号。对外部使用双引号。
【解决方案3】:

你从哪里得到这个字符串?是 JSON 格式吗?还是python字典格式?还是只是一些恰好类似于 python 字典的 ad-hoc 格式?

如果它是 JSON,或者它只是一个 dict,并且只包含字符串和/或数字,你可以使用json.loads,这是最安全的选择,因为它根本无法解析 python 代码。

这种方法有一些缺点,例如,如果字符串用单引号 ' 而不是双引号 " 括起来,更不用说它只解析 json 对象/数组,这只是巧合 恰好与 pythons dicts/arrays 共享相似的语法。

虽然我认为您得到的字符串很可能是 JSON 格式。我做出这个假设是因为它是一种常见的数据交换格式。

【讨论】:

    【解决方案4】:

    使用 json.loads - 可能更快

    【讨论】:

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