使用Python提取列表中的字典键

时间:2011-03-15 22:14:23

标签: python json list dictionary twitter

我在输入以下网址时收到了一个列表 - http://api.twitter.com/1/trends/44418.json

该列表包含多个词典,我对列表结构有点困惑。我正在尝试获取与“名称”键相关联的值。

例如:

“名称”: “#throwagrenade”    “名字”:“Rebecca Black”    “名称”: “#questionsihate”

我可以自己编写代码,我只是想在概念上理解如何在列表中访问字典(及其键/值对)。

4 个答案:

答案 0 :(得分:22)

在使用大块json时,我要做的第一件事就是尝试将其变为更易读的格式。 This online json formatting tool应该完成这项工作。

以下是一些将获得所有趋势名称的代码:

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 on json(虽然你应该只需要json.loads()

Dive Into Python关于listsdictionaries的部分。

答案 1 :(得分:8)

嗯,首先,该链接为您提供JSON,因此您需要使用json库对其进行反序列化:

data = json.loads(response_data)

现在您只需要一个词典列表。您可以使用for循环轻松遍历列表。在每次迭代中,您都有一个普通字典,您可以使用通常的字典语法从中获取与name键对应的值。

你可以通过简单的列表理解一次完成整个事情:

names = [item['name'] for item in data]

答案 2 :(得分:4)

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

答案 3 :(得分:1)

这是一个JSON文件,因此您需要使用JSON解析器来读取它。 Python 2.7中有a parser - 仅import json。使用该结构,您可以从Python操作它。

如果您真的不关心name键在结构中的哪个位置,您可以通过树递归寻找它们(if key == "name"),或者使用正则表达式。

正则表达式会很麻烦,因为需要在匹配中包含转义字符。