【问题标题】:How can I parse a dictionary string?如何解析字典字符串?
【发布时间】:2015-06-13 09:03:26
【问题描述】:

我正在尝试使用dict 函数将字符串转换为字典,就像这样

import json
p = "{'id':'12589456'}"
d = dict(p)
print d['id']  

但我收到以下错误

ValueError: dictionary update sequence element #0 has length 1; 2 is required

为什么会失败?我该如何解决这个问题?

【问题讨论】:

    标签: python python-2.7 dictionary


    【解决方案1】:

    你拥有的是一个字符串,但dict 函数只能遍历元组(键值对)来构造字典。请参阅dict 的文档中给出的示例。

    在这种特殊情况下,您可以使用ast.literal_eval 将字符串转换为对应的dict 对象,如下所示

    >>> p = "{'id':'12589456'}"
    >>> from ast import literal_eval
    >>> d = literal_eval(p)
    >>> d['id']
    '12589456'
    

    【讨论】:

      【解决方案2】:

      由于p 是一个包含 JSON (ish) 的字符串,因此您必须先加载它才能取回 Python 字典。然后您可以访问其中的项目:

      p = '{"id":"12589456"}'
      d = json.loads(p)
      print d["id"]
      

      但是,请注意p 中的值实际上不是 JSON; JSON 要求(并且 Python json 模块强制执行)字符串用双引号而不是单引号引起来。我已在此处的示例中对其进行了更新,但根据您从何处获得示例,您可能还有更多工作要做。

      【讨论】:

      • 基本上你解决了一个不同的问题并推荐给 OP?
      • p is a string containing JSON (ish) - 不,不是。
      • @LalitSingh json.loads 不适合你。它仅适用于 JSON 字符串。你所拥有的不是 JSON 字符串。
      • "{'id':'12589456'}" 和 '{"id":"12589456"}' 有什么区别
      • @LalitSingh JSON 键只能有双引号。单引号不是有效的 JSON。
      猜你喜欢
      • 2015-02-02
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多