不想学习hhh 2022-10-29 13:40 采纳率: 85.7%
浏览 21
已结题

关于函数type error的问题

有一个字典a
a = {0: (-37.4168610028693, 145.005372256037),
1: (-37.7032933463858, 144.572524145218),
2: (-37.7292612709136, 144.650631483984),
3: (-37.7777637471456, 144.772303608804),
4: (-37.5792063872414, 144.72816450831)}

我想写一个函数来计算某个点到a字典中所有点的haversine距离并且返回最短距离和字典的key,我的代码如下:

def get_min_dis2(a:dict,b:tuple):
    min_dist = 10000
    for k in a.keys():
        lat1, lon1 = a[k]
        lat2, lon2 = b
        dlat = math.radians(lat2-lat1)
        dlon = math.radians(lon2-lon1)
        a = (math.sin(dlat / 2) * math.sin(dlat / 2) + math.cos(math.radians(lat1)) * math.cos(math.radians(lat2))*
            math.sin(dlon / 2) * math.sin(dlon / 2))
        c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
        distance = c * 6378
        if distance < min_dist:
            min_dist = distance
            key = k
    return (key,b,min_dist)

get_min_dis2(a,(-37.8438,145.0303))
但是我运行时会一直报错TypeError: 'float' object is not subscriptable
请问要如何解决呢

  • 写回答

1条回答 默认 最新

  • 游一游走一走 2022-10-29 14:08
    关注

    你改变a的类型了

    img

    import math
    
    a = {0: (-37.4168610028693, 145.005372256037),
         1: (-37.7032933463858, 144.572524145218),
         2: (-37.7292612709136, 144.650631483984),
         3: (-37.7777637471456, 144.772303608804),
         4: (-37.5792063872414, 144.72816450831)}
    
    
    def get_min_dis2(data: dict, b: tuple):
        min_dist = float('inf')
        for k in data.keys():
            lat1, lon1 = data[k]
            lat2, lon2 = b
            dlat = math.radians(lat2 - lat1)
            dlon = math.radians(lon2 - lon1)
            a = (math.sin(dlat / 2) * math.sin(dlat / 2) + math.cos(math.radians(lat1)) * math.cos(math.radians(lat2)) *
                 math.sin(dlon / 2) * math.sin(dlon / 2))
            c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
            distance = c * 6378
            if distance < min_dist:
                min_dist = distance
                key = k
        return (key, b, min_dist)
    
    
    print(get_min_dis2(a, (1, 1)))
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 11月5日
  • 已采纳回答 10月29日
  • 创建了问题 10月29日

悬赏问题

  • ¥15 本地安装org.Hs.eg.dby一直这样的图片报错如何解决?
  • ¥15 下面三个文件分别是OFDM波形的数据,我的思路公式和我写的成像算法代码,有没有人能帮我改一改,如何解决?
  • ¥15 Ubuntu打开gazebo模型调不出来,如何解决?
  • ¥100 有chang请一位会arm和dsp的朋友解读一个工程
  • ¥50 求代做一个阿里云百炼的小实验
  • ¥15 查询优化:A表100000行,B表2000 行,内存页大小只有20页,运行时3页,设计两个表等值连接的最简单的算法
  • ¥15 led数码显示控制(标签-流程图)
  • ¥20 为什么在复位后出现错误帧
  • ¥15 结果有了,想问一下这个具体怎么输入
  • ¥15 怎么修改鸿蒙app的UI及功能设计