迭代python中的Geocoding API响应

时间:2015-02-05 17:43:12

标签: python google-maps

我正在尝试在反向地理编码Google Maps API中找到['locality', 'political']值。

我可以在Javascript中实现相同的目的:

var formatted = data.results;
$.each(formatted, function(){
     if(this.types.length!=0){
          if(this.types[0]=='locality' && this.types[1]=='political'){
               address_array = this.formatted_address.split(',');
          }else{
               //somefunction
          }
     }else{
         //somefunction
     }
});

使用Python,我尝试了以下内容:

url = 'https://maps.googleapis.com/maps/api/geocode/json?latlng='+lat+','+long+'&result_type=locality&key='+MAPS_API_KEY
results = json.loads(urllib.request.urlopen(url).read().decode('utf-8'))
city_components = results['results'][0]
for c in results:
    if c['types']:
        if c['types'][0] == 'locality':
            print(c['types'])

这给了我一堆错误。我无法通过迭代响应对象找到['locality', 'political']值来查找相关的城市short_name。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您正在尝试访问字典的键,但是您正在迭代该键的字符:

for c in results:
    if c['types']:

results是一本字典(显而易见的是city_components=行)。当您键入for c in results时,您将c绑定到该字典的键(依次)。这意味着c是一个字符串(在您的场景中,很可能所有键都是字符串)。因此,输入c['types']没有意义:您正在尝试访问字符串的值/属性'types' ...

很可能你想要:

for option in results['results']:
    addr_comp = option.get('address_components', [])
    for address_type in addr_comp:
        flags = address_type.get('types', [])
        if 'locality' in flags and 'political' in flags:
            print(address_type['short_name'])