Python как обрабатывать # в словаре - PullRequest
0 голосов
/ 30 мая 2010

У меня есть json из api last.fm, который я сериализовал в словарь, используя simplejson Краткий пример базовой структуры приведен ниже.

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

Есть идеи, как получить доступ к URL-адресам изображений различных размеров?

Спасибо
Jack

Ответы [ 3 ]

4 голосов
/ 30 мая 2010

В Python нет проблем с # в строках, используемых в качестве ключей dict.

>>> 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 с одним и тем же ключом «изображение» три раза, который не может сосуществовать и делать что-то полезное.

3 голосов
/ 30 мая 2010

В Javascript эти два синтаксиса эквивалентны:

o.foo
o['foo']

В Python их нет. Первый дает вам атрибут foo, второй - ключ foo. (Это спорный вопрос, было ли это хорошая идея или нет.) В Python, вы не сможете получить доступ к #text как:

o.#text

потому что хеш запустит комментарий, и у вас будет синтаксическая ошибка.

Но вы хотите

o['#text']

в любом случае.

0 голосов
/ 30 мая 2010

Вы можете получить то, что вы хотите из списка изображений с пониманием списка. Что-то вроде

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

Здесь изображения будут списком диктовок из внутреннего уровня вашей структуры данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...