Python 从列表中查找最近的一对坐标

Python 从列表中查找最近的一对坐标,python,Python,我正在尝试将解决方案实施到以前的版本中 我有一对坐标,我希望在坐标列表中找到最接近的一对坐标 这可以通过找到点间距离最小的一对来实现: dist = lambda s,d: (s[0]-d[0])**2+(s[1]-d[1])**2 我有一本字典,来源: {u'toid': u'osgb4000000029928750', u'point': [524511.405, 184846.794]} 我有另一个包含坐标对的列表,d_原点: [(532163.5648939193, 181848.7

我正在尝试将解决方案实施到以前的版本中

我有一对坐标,我希望在坐标列表中找到最接近的一对坐标

这可以通过找到点间距离最小的一对来实现:

dist = lambda s,d: (s[0]-d[0])**2+(s[1]-d[1])**2
我有一本字典,来源:

{u'toid': u'osgb4000000029928750', u'point': [524511.405, 184846.794]}
我有另一个包含坐标对的列表,d_原点:

[(532163.5648939193, 181848.77608212957),(532449.8292416488, 181847.71793660522), (532200.2156880093, 182053.30247829395), (533794.6284605444, 181119.5631480558)]
然后,我尝试通过调用dist lambda函数来查找匹配值:

match = min((origin[0]['point']),key=partial(dist,d_origins))
print origins, match
然而,输出是:

TypeError: 'float' object has no attribute '__getitem__'

min
函数接受一个列表或iterable。此外,排序可以由带有一个参数的函数指定。这意味着函数将一个元素映射到一个值,然后通过
min
函数对该值进行比较,以找到最小元素

match = min(d_origins, key=lambda p: dist(p, origin['point']))
lambda表达式通过提供一个参数,将带有两个参数的
dist
函数包装为带有一个参数的函数。新的匿名函数将坐标与lambda表达式中的特定原点进行比较。然后,
min
函数的结果是与该原点最近的坐标

完整示例:

>>> dist = lambda s,d: (s[0]-d[0])**2+(s[1]-d[1])**2
>>> origin = {'toid': 'osgb4000000029928750', 'point': [524511.405, 184846.794]}
>>> d_origins = [(532163.5648939193, 181848.77608212957),(532449.8292416488, 181847.71793660522), (532200.2156880093, 182053.30247829395), (533794.6284605444, 181119.5631480558)]
>>> 
>>> match = min(d_origins, key=lambda p: dist(p, origin['point']))
>>> print(str(match))
(532200.2156880093, 182053.30247829395)

这不应该是
min(d_origins,key=partial(dist,origin['point'))
?无论如何,如果您发布错误,请发布代码并发布回溯。回溯非常重要,通常包含问题的答案。事实上,你没有包括它表明你没有仔细阅读它。非常正确,斯文!我通过仔细阅读痕迹解决了这个问题。