我想将Tweepy api.trends_location(woeid)
调用的结果转换为dict(或dicts的词典),所以我可以使用这些值(实际上,我想最终得到一个dict '名称'值)。 Tweepy文档说结果是'一个JSON对象'(see here),但当我检索它时,type(retrieved)
计算为list
。果然,retrieved
的{{1}}为1,len
给了我一个项目:
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
我该怎么办?
链接到完整代码:https://gist.github.com/805129
答案 0 :(得分:3)
好的,应该这样做!它甚至经过测试(感谢发布附加信息)。
>>> 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
键。
答案 1 :(得分:2)
这样的事情对你有用吗?
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
。
答案 2 :(得分:1)
转换Tweepy'状态'反对Python字典(JSON),访问私有成员" _json"在对象上。
tweets = tweepy_api.user_timeline(screen_name='seanharr11')
json_tweets = map(lambda t: t._json, tweets)
答案 3 :(得分:0)
>>> import simplejson
>>> a = {"response":[{"message":"ok"},{"message":"fail"}]}
>>> json = simplejson.dumps(a)
>>> simplejson.loads(json)
{'response': [{'message': 'ok'}, {'message': 'fail'}]}