Преобразовать Tweepy Json объект DICT
Вопрос
Я хотел бы преобразовать результат твип api.trends_location(woeid)
Призовите дикт (или дикт дадн), чтобы я мог работать со значениями (на самом деле, я хочу получить дикт значений «имени»). В твиевой документации говорится, что результатом является «объект JSON» (глянь сюда), но когда я его забираю, type(retrieved)
оценивает list
. Анкет Конечно, retrieved
имеет len
1, и retrieved[0]
дает мне один предмет:
[{'trends': [{'url': 'http://search.twitter.com/search?q=%23questionsidontlike', 'query': '%23questionsidontlike', 'events': None, 'promoted_content': None, 'name': '#questionsidontlike'}, ], (more of the same), 'created_at': '2011-01-31T22:39:16Z', 'as_of': '2011-01-31T22:47:47Z', 'locations': [{'woeid': 23424977, 'name': 'United States'}]}]
.
я могу позвонить json.dumps
, что даст красиво форматированное представление, но это не так уж и много для меня, и json.loads
дает мне: __init__() got an unexpected keyword argument 'sort_keys'
Как мне продолжить?
Ссылка на полный код: https://gist.github.com/805129
Решение
Хорошо, это должно это сделать! Это даже протестировано (спасибо за публикацию дополнительной информации).
>>> names = [trend["name"] for trend in retrieved[0]["trends"]]
>>> names
['#wishuwould', '#questionsidontlike', '#februarywish', 'Purp & Patron', 'Egyptians', 'Kool Herc', 'American Pie', 'Judge Vinson', 'Eureka Nutt', 'Eddie House']
Я думаю, что большая часть путаницы была получена из документации, ссылаясь на вывод как объект JSON, который отличается от строки JSON, который необходимо преобразовать с помощью json
модуль.
Как это работает: retrieved
это список, который содержит один элемент, который является словарем, который содержит trends
Ключ, так retrieved[0]["trends"]
является списком словарей тренда, где каждый словарь тренда содержит name
Ключ вас заинтересован.
Другие советы
Будет ли что -то подобное работать для вас?
def searchKeys(struct, keys, result = None, recursive = True):
if result is None:
result = []
if isinstance(struct, dict):
for k in keys:
if struct.has_key(k):
result.append(struct[k])
if recursive:
for i in struct.values():
searchKeys(struct = i, keys = keys, result = result, recursive = recursive)
elif isinstance(struct, list):
if recursive:
for i in struct:
searchKeys(struct = i, keys = keys, result = result, recursive = recursive)
return result
Пример использования:
>>> searchKeys(struct = a, keys = ['name'])
['United States', '#questionsidontlike']
Рекурсивно идет по dict
/list
иерархия в поисках набора dict
Ключи и хранит соответствующие значения для list
.
Чтобы преобразовать твиевый объект «статус» в словарь Python (JSON), обратитесь к частному участнику «_JSON» на объект.
tweets = tweepy_api.user_timeline(screen_name='seanharr11')
json_tweets = map(lambda t: t._json, tweets)
>>> import simplejson
>>> a = {"response":[{"message":"ok"},{"message":"fail"}]}
>>> json = simplejson.dumps(a)
>>> simplejson.loads(json)
{'response': [{'message': 'ok'}, {'message': 'fail'}]}