【问题标题】:Python Closest coordinates in dictionaryPython字典中的最近坐标
【发布时间】:2017-03-26 06:37:21
【问题描述】:

我有以下字典:

points = {'Location1': (76, 81), 'Location2': (75, 105), 'Location3': (76, 130), 'Location4': (76, 152)}

如果我有一组坐标,我正在尝试; coord = (x, y) 找到与坐标最接近的值对的键。但我想检索与最接近的键对应的键。

我是这样做的,但必须有更有效的方法。

points = {'Location1': (76, 81), 'Location2': (75, 105), 'Location3': (76, 130), 'Location4': (76, 152)}
array =  [(76, 81),  (75, 105),  (76,  130), (76,  152)]

def find_nearest(array,coord):

    dist = lambda s, d: (s[0] - d[0]) ** 2 + (s[1] - d[1]) ** 2

    result = min(array, key=partial(dist, coord))

    return result

found = find_nearest(array,coord)

print (list(points.keys())[list(points.values()).index(found)])

【问题讨论】:

    标签: python list python-3.x dictionary


    【解决方案1】:

    你根本不需要使用列表(array),你可以将字典(points)传给min;字典的键将被传递给key函数:

    >>> from functools import partial
    >>>
    >>> def find_nearest(points, coord):
    ...     dist = lambda s, key: (s[0] - points[key][0]) ** 2 + \
    ...                           (s[1] - points[key][1]) ** 2
    ...     return min(points, key=partial(dist, coord))
    ...
    >>> points = {'Location1': (76, 81), 'Location2': (75, 105),
    ...           'Location3': (76, 130), 'Location4': (76, 152)}
    >>> find_nearest(points, (0, 0))
    'Location1'
    >>> find_nearest(points, (100, 100))
    'Location2'
    >>> find_nearest(points, (100, 200))
    'Location4'
    

    直接在lambda中访问coord,可以去掉partial

    def find_nearest(points, coord):
        dist = lambda key: (coord[0] - points[key][0]) ** 2 + \
                           (coord[1] - points[key][1]) ** 2
        return min(points, key=dist)
    

    def find_nearest(points, coord):
        x, y = coord
        dist = lambda key: (x - points[key][0]) ** 2 + (y - points[key][1]) ** 2
        return min(points, key=dist)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多