在Python中访问字典元素
我正在处理一些推特数据,我通过监控推特的实时数据流来获取这些数据,然后把结果保存到一个*.txt文件里。
我想用Python来处理这个txt文件,为此我使用了json.loads()这个指令,针对文件中的每一行,也就是保存推特数据流结果的每一行,这样我就能把每一行当作一个json对象来处理。
for line in twitter_file
data = json.loads(line)
这个json对象(每一行对应一个json对象)被加载到一个叫“data”的变量里。
一切都运行得很好,当我尝试访问“data”这个json对象中的某个元素时,我可以做到,比如说,如果我想查看“place”这个元素,我可以用data["place"]来访问,这样我就得到了:
"place":{
"id":"00a961d91f76dde8",
"url":"https:\/\/api.twitter.com\/1.1\/geo\/id\/00a961d91f76dde8.json",
"place_type":"city",
"name":"Capital - Corrientes",
"full_name":"Capital - Corrientes",
"country_code":"AR",
"country":"Argentina",
"contained_within":[]
}
我可以访问“place”这个元素,如果我执行print data["place"],我能看到上面显示的文本。
问题出现在我尝试访问“place”字典中的一个特定键时,
我试着这样做:
data["place"]["place_type"]
我希望能得到“city”的值作为结果,但我做不到,出现了以下错误:TypeError: "NoneType" object has no attribute '__getitem__'
我还尝试了其他方法来显示键值对,使用了以下代码:
for key,value in data["data"].items()
print key
但我没有得到结果。
我还尝试了:
print data["place"].keys()[0]
想打印出第一个元素,但也不行。我得到了以下错误信息:AttributeError: 'NoneType' object has no attribute 'keys'
看起来我的data["place"]在Python中并没有被当作字典来处理,我猜是这样,但我不太确定,我对Python还很陌生,所以任何评论对我来说都很有帮助。
1 个回答
你正在循环读取一个文件,并把每一行当作JSON格式的数据来加载。有些JSON对象的place
设置为一个字典,而另一些则设置为None
。
每当你加载了一行,其中place
这个键的值是None
时,就会出现AttributeError
这个错误。
所以你需要先检查一下这个情况:
place = data['place']
if place is not None:
print place['place_type']