Converter object JSON tweepy para ditar

Eu gostaria de converter o resultado de um tweepy api.trends_location(woeid) chamada para um dict (ou um dict de dicts), então eu posso trabalhar com os valores (na verdade, eu quero acabar com um dict do ‘ nome ‘valores). A documentação do Tweepy diz que o resultado é ‘um object JSON’ ( veja aqui ), mas quando eu o recupero, type(retrieved) avalia a list . Com certeza, retrieved tem um len de 1 e retrieved[0] me dá um único item:
[{'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'}]}] .

Eu posso chamar o json.dumps , que dará uma representação bem formatada, mas isso não é muito útil para mim, e o json.loads me dá: __init__() got an unexpected keyword argument 'sort_keys'

Como devo proceder?

Link para o código completo: https://gist.github.com/805129

Ok, isso deveria fazer isso! É mesmo testado (obrigado por postar as informações adicionais).

 >>> 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'] 

Acho que a maior parte da confusão veio da documentação referente à saída como um object JSON, que é diferente de uma string JSON que precisaria ser convertida usando o módulo json .

Como isso funciona: retrieved é uma lista que contém um único item, que é o dictionary que contém a chave de trends , então retrieved[0]["trends"] é a lista de dictionarys de tendência, onde cada dictionary de tendência contém a chave de name estão interessados ​​em.

Algo assim funcionaria para você?

 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 

Exemplo de uso:

 >>> searchKeys(struct = a, keys = ['name']) ['United States', '#questionsidontlike'] 

Ele percorre recursivamente uma hierarquia dict / list procurando por um conjunto de chaves dict e armazena os valores correspondentes em uma list .

Para converter um object ‘Status’ do Tweepy em um dictionary do Python (JSON), acesse o membro particular “_json” no object.

 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'}]} 

http://docs.python.org/library/json.html