【问题标题】:Python how to handle # in a dictionaryPython如何处理字典中的#
【发布时间】:2011-02-25 16:54:14
【问题描述】:

我从 last.fm 的 api 中获得了一些 json,我使用 simplejson 将其序列化为字典。下面是基本结构的一个简单示例。

{
  "artist": "similar": {
    "artist": {
      "name": "Blah",
      "image": [{
        "#text": "URLHERE",
        "size": "small"
      }, {
        "#text": "URLHERE",
        "size": "medium"
      }, {
        "#text": "URLHERE",
        "size": "large"
      }]
    }
  }
}

有什么办法可以访问各种不同大小的图片网址吗?

谢谢,
杰克

【问题讨论】:

  • 您可能应该粘贴一些 Python 代码或澄清一下。在包含“#”的字典中查找字符串键就可以了:>>> x = {"#foo":"bar"} >>> x["#foo"] 'bar'

标签: python json api


【解决方案1】:

您可以通过列表理解从图像列表中获得所需的内容。类似的东西

desired = [x for x in images if minSize < x['size'] < maxSize]

在这里,图像将是数据结构内部级别的字典列表。

【讨论】:

    【解决方案2】:

    Python 对用作字典键的字符串中的 # 没有任何问题。

    >>> import json
    >>> j = '{"#foo": 6}'
    >>> print json.loads(j)
    {u'#foo': 6}
    >>> print json.loads(j)[u'#foo']
    6
    >>> print json.loads(j)['#foo']
    6
    

    但是,您发布的 JSON 存在问题。一方面,它是无效的(也许你错过了几个逗号?)。对于两个,你有一个 JSON 对象与相同的键“图像”三次,它们不能共存并做任何有用的事情。

    【讨论】:

    • 啊,您对 JSON 错误的看法是对的。我现在已经修好了,有什么想法可以根据我想要的大小访问网址吗?
    【解决方案3】:

    在 Javascript 中,这两种语法是等价的:

    o.foo
    o['foo']
    

    在 Python 中它们不是。第一个给你 foo 属性,第二个给你 foo 键。 (这是否是一个好主意值得商榷。)在 Python 中,您将无法访问 #text

    o.#text
    

    因为散列会开始注释,并且会出现语法错误。

    但你想要

    o['#text']
    

    无论如何。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2023-02-16
      • 2018-01-15
      • 1970-01-01
      相关资源
      最近更新 更多