Использование Python для извлечения словарных ключей в списке

Я получил список при вводе следующего URL-адреса: http://api.twitter.com/1/trends/44418.json

Список содержит несколько словарей, и я немного запутался со структурой списка. Я пытаюсь получить значения, связанные с ключом «имя».

Например:

"name": "# throwagrenade" "name": "Rebecca Black" "name": "# questionsihate"

Я могу написать код сам, я просто пытаюсь концептуально понять, как получить доступ к словарям (и их парам ключ / значение) в списке.

  • Поток Twitter по местоположению
  • Ограничить поток tweepy до определенного числа
  • Получите все идентификаторы следящего устройства в Twitter от Tweepy
  • urllib.request в Python 2.7
  • Traceback при обновлении статуса на твиттере через Tweepy
  • tweepy count ограничено до 200?
  • 401 с использованием функций Streaming API Twitter (через Tweepy)
  • Использование Twython для отправки твита, twitter api error
  • 4 Solutions collect form web for “Использование Python для извлечения словарных ключей в списке”

    Первое, что я хотел бы сделать, работая с большим куском 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
     Ребекка Блэк
     Эрик Абидаль
     #questionsihate
     #juniordoctors
     Смайли Культура
     Лили Аллен
     Уэс Браун
     Пандев
     Рэй Уилкинс
    

    Соответствующее чтение:

    Python docs на json (хотя вам действительно нужно только json.loads() )

    Погружение в разделы Python по спискам и словарям .

    Ну, для начала эта ссылка дает вам JSON, поэтому вам нужно будет десериализовать его с помощью библиотеки json :

     data = json.loads(response_data) 

    Теперь у вас есть список словарей. Вы можете легко перебирать список с помощью цикла for . На каждой итерации у вас есть нормальный словарь, из которого вы можете получить значение, соответствующее ключу с обычным синтаксисом словаря.

    Вы можете сделать все это сразу с простым пониманием списка:

     names = [item['name'] for item in data] 
     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'] 

    Это файл JSON, поэтому вам нужно использовать JSON-парсер для его чтения. В Python 2.7 есть синтаксический анализатор – просто import json . С помощью этой структуры вы можете манипулировать ею с Python.

    Если вам действительно все равно, где в структуре есть ключи name , вы можете либо пройти через дерево, ищущее их ( if key == "name" ), либо, возможно, использовать регулярное выражение.

    Регулярное выражение будет очень больно, однако, из-за необходимости включать экранированные символы в соответствие.

    Python - лучший язык программирования в мире.