2010-05-30 64 views
0

我从last.fm的api中获得了一些json,我已经使用simplejson将其序列化为字典。下面是一个基本结构的简单例子。Python如何在字典中处理#

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

任何想法如何我可以访问各种不同大小的图像网址?

感谢,
杰克

+1

你可能应该粘贴一些你的python代码或者澄清一点。在包含“#”的字典中查找一个字符串键就行了:>>> x = {“#foo”:“bar”} >>> x [“#foo”] 'bar' – whaley 2010-05-30 14:12:18

回答

4

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对象具有三次相同的关键“图像”,它不能共存并做任何有用的事情。

+0

啊,你的正确的关于JSON是错误的。我已经修复了它,任何想法如何访问网址取决于我想要的大小? – Jack 2010-05-30 14:35:49

3

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

o.foo 
o['foo'] 

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

o.#text 

因为散列将启动一个评论,你就会有一个语法错误。

但是你要

o['#text'] 
在任何情况下

0

你可以从列表理解中得到你想要的图像列表。类似于

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

在这里,图像将是您数据结构内层的字典列表。