Использование Python для извлечения словарных ключей в списке
Я получил список при вводе следующего URL-адреса: http://api.twitter.com/1/trends/44418.json
Список содержит несколько словарей, и я немного запутался со структурой списка. Я пытаюсь получить значения, связанные с ключом "name".
Например:
"имя": "# throwagrenade" "имя": "Ребекка Блэк" "Название": "# questionsihate"
Я могу написать код сам, я просто пытаюсь концептуально понять, как получить доступ к словарям (и их парам ключ/значение) в списке.
Ответы
Ответ 1
Первое, что я хотел бы сделать, работая с большим куском json, - попытаться перевести его в более читаемый формат. Этот онлайн-инструмент форматирования json должен выполнить эту работу.
Вот код, который получит все имена трендов:
import urllib2
import json
url = 'http://api.twitter.com/1/trends/44418.json'
# download the json string
json_string = urllib2.urlopen(url).read()
# de-serialize the string so that we can work with it
the_data = json.loads(json_string)
# get the list of trends
trends = the_data[0]['trends']
# print the name of each trend
for trend in trends:
print trend['name']
Или вы можете сделать все это в одной строке:
names = [trend['name'] for trend in the_data[0]['trends']]
for name in names:
print name
Оба приведут к:
#throwagrenade
Rebecca Black
Eric Abidal
#questionsihate
#juniordoctors
Smiley Culture
Lily Allen
Wes Brown
Pandev
Ray Wilkins
Соответствующее чтение:
Python docs на json (хотя вам действительно нужно только json.loads()
)
разделы Dive Into Python на lists и dictionaries.
Ответ 2
Ну, для начала эта ссылка дает вам JSON, поэтому вам нужно десериализовать его с помощью библиотеки json
:
data = json.loads(response_data)
Теперь у вас просто есть список словарей. Вы можете легко перебирать список с помощью цикла for
. На каждой итерации у вас есть нормальный словарь, из которого вы можете получить значение, соответствующее клавише name
, с обычным синтаксисом словаря.
Вы можете сделать все сразу сразу с простым пониманием списка:
names = [item['name'] for item in data]
Ответ 3
import urllib2
import json
url = 'http://api.twitter.com/1/trends/44418.json'
data = urllib2.urlopen(url).read()
j = json.loads(data)
names = [d['name'] for d in j[0]['trends']]
приводит к
names = [u'#throwagrenade', u'Rebecca Black', u'#questionsihate',
u'#thingsthatdontgotogether', u'Eric Abidal', u'Smiley Culture',
u'Ray Wilkins', u'Wes Brown', u'Twenty Twelve', u'Marseille']
Ответ 4
Это файл JSON, поэтому вам нужно использовать анализатор JSON для его чтения. Существует парсер в Python 2.7 - просто import json
. С помощью этой структуры вы можете манипулировать ею с Python.
Если вам действительно все равно, где в структуре находятся клавиши name
, вы можете либо пройти через дерево, ищущее их (if key == "name"
), либо, возможно, использовать регулярное выражение.
Регулярное выражение будет больно, однако, из-за необходимости включать экранированные символы в соответствие.