有 -它已经被解析json.load()
并返回Python的数据结构。 带有列表或不同词典的 它。
要访问您应该使用的数据,可以使用以下方法:
jsondata['results'][0]['address_components']
包含所有 :
[{u’long_name’:u’S \ xf6dra L \ xe4nken’,u’types’:[u’route’],u’short_name’:u’S \ xf6dra L \ xe4nken’},{u’long_name’:u’Stockholm ‘,u’types’:[u’locality’,u’political’],u’short_name’:u’Stockholm’},{u’long_name’:u’Stockholm’,u’types’:[u’administrative_area_level_1 ‘,u’political’],u’short_name’:u’Stockholm’},{u’long_name’:u’Sweden’,u’types’:[u’country’,u’political’],u’short_name ‘:u’SE’},{u’long_name’:u‘12146’,u’types’:[u’postal_code’],u’short_name’:u‘12146’},{u’long_name’:u’ Johanneshov’,u’types’:[u’postal_town’],u’short_name’:u’Johanneshov’}]
正如你所看到的,有很多你并不需要的数据,但你只想要locality
和administrative_area_level_1
信息。您可以使用以下filter()
Python函数过滤数据:
>>> mydata = jsondata['results'][0]['address_components']
>>> types = ['locality', 'administrative_area_level_1']
>>> geonames = filter(lambda x: len(set(x['types']).intersection(types)), mydata)
基本上,您只会获得在“类型”列表中具有“本地性”或“ administrative_area_level_1”的元素。完成上述操作后,geonames
将列出您需要的词典:
[{u’long_name’:u’Stockholm’,u’types’:[u’locality’,u’political’],u’short_name’:u’Stockholm’},{u’long_name’:u’Stockholm’ ,u’types’:[u’administrative_area_level_1’,u’political’],u’short_name’:u’Stockholm’}]
要显示其名称,您可以例如。遍历它们,显示long_name
s和相应的types
值:
>>> for geoname in geonames:
common_types = set(geoname['types']).intersection(set(types))
print '{} ({})'.format(geoname['long_name'], str(', '.join(common_types)))
Stockholm (locality)
Stockholm (administrative_area_level_1)
这是您所期望的吗?
代码看起来像这样:
import json
import urllib2
def get_geonames(lat, lng, types):
url = 'http://maps.googleapis.com/maps/api/geocode/json' + \
'?latlng={},{}&sensor=false'.format(lat, lng)
jsondata = json.load(urllib2.urlopen(url))
address_comps = jsondata['results'][0]['address_components']
filter_method = lambda x: len(set(x['types']).intersection(types))
return filter(filter_method, address_comps)
lat, lng = 59.3, 18.1
types = ['locality', 'administrative_area_level_1']
# Display all geographical names along with their types
for geoname in get_geonames(lat, lng, types):
common_types = set(geoname['types']).intersection(set(types))
print '{} ({})'.format(geoname['long_name'], ', '.join(common_types))