You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何提取数组元素的geo_lon与geo_lat属性?

问题:提取数组中的geo_lon和geo_lat属性时触发TypeError

我有多个类似如下的数组,需要提取其中的geo_lon和geo_lat属性:

[{'value': '658747', 'unrestricted_value': 'Алтайский край, Крутихинский р-н, с Волчно-Бурлинское, ул Партизанская, д 98', 'data': {'postal_code': '658747', 'is_closed': False, 'type_code': 'СОПС', 'address_str': 'Алтайский край, Крутихинский р-н, с Волчно-Бурлинское, ул Партизанская, д 98', 'address_kladr_id': '2202300000600', 'address_qc': '0', 'geo_lat': 54.053755, 'geo_lon': 80.768417, 'schedule_mon': '09:00-17:00, обед 13:00-14:00', 'schedule_tue': None, 'schedule_wed': '09:00-17:00, обед 13:00-14:00', 'schedule_thu': '09:00-17:00, обед 13:00-14:00', 'schedule_fri': '09:00-17:00, обед 13:00-14:00', 'schedule_sat': '09:00-16:00, обед 13:00-14:00', 'schedule_sun': None}}]

我运行了以下代码(list_1为获取到的响应数组):

for index, element in enumerate(list_1):
    d = dadata.suggest("postal_unit", element)
    
    for feature in d['data']:
        coor = feature['geo_lon']
        print(coor)

但触发了错误:

for feature in d['data']:
TypeError: list indices must be integers or slices, not str

错误原因

报错说明d本身是列表类型,不是字典,所以不能用d['data']这种字符串索引访问元素,必须用整数索引(比如d[0])或切片。结合你提供的示例数组来看,dadata.suggest()返回的是列表,而非包含data键的字典。

解决方案

方案1:遍历返回列表中的所有项

如果dadata.suggest()可能返回多个结果,用循环遍历列表中的每个元素,再提取内部的data字段:

for index, element in enumerate(list_1):
    d = dadata.suggest("postal_unit", element)
    
    # 遍历列表中的每个返回项
    for item in d:
        # 从item中取出data字典
        location_data = item['data']
        lon = location_data['geo_lon']
        lat = location_data['geo_lat']
        print(f"经度: {lon}, 纬度: {lat}")

方案2:直接访问列表中的单个元素

如果dadata.suggest()每次只返回一个结果,可以直接用索引[0]访问,同时增加非空判断避免索引错误:

for index, element in enumerate(list_1):
    d = dadata.suggest("postal_unit", element)
    
    if d:  # 先确认列表不为空
        location_data = d[0]['data']
        lon = location_data['geo_lon']
        lat = location_data['geo_lat']
        print(f"经度: {lon}, 纬度: {lat}")

排查小技巧

作为Python新手,遇到结构不明确的返回值时,可以先打印类型和内容,快速理清数据结构:

for index, element in enumerate(list_1):
    d = dadata.suggest("postal_unit", element)
    print(type(d))  # 打印d的类型,确认是列表还是字典
    print(d)        # 打印d的具体内容,看清内部结构

内容的提问来源于stack exchange,提问作者odo sd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:20:49