使用词典查找附近的点

时间:2017-12-07 00:42:14

标签: python dictionary

我试图在字典中找到每个其他点的最近点。在这个字典中,键是点坐标,看起来像这样

print d1
{(1, 1): 0, (2, 1): 1, (3, 1): 2, (10, 41):3}

这里的输出应该是另一个字典,其中每个位置都有键,值是附近点的列表。附近的一个点被定义为+/- 1远离任何其他点(如果没有附近的点,那么像" nan"可以设置为值)。

例如,此处的输出应如下所示:

{(1, 1): [(2,1)], (2, 1): [(1,1), (3,1)], (3, 1): [(2,1)], (10, 41): nan}

1 个答案:

答案 0 :(得分:1)

您可以使用列表推导来迭代原始字典的键和值,并在字典中搜索类似的键。如果没有找到任何键的结果,那么持久的简单过滤将创建"nan"

d = {(1, 1): 0, (2, 1): 1, (3, 1): 2, (10, 41):3}
new_d = {a:[c for c, b in d.items() if any(abs(i-a[0]) == 1 or abs(i-a[-1])==1 for i in c) and c != a] for a, h in d.items()}
final_d = {a:"nan" if not b else b for a, b in new_d.items()}

math.hypot()的替代解决方案:

import math
new_d = {a:[c for c, b in d.items() if math.hypot(a[0]-c[0], a[1]-c[1])<= 1 and c != a] for a, h in d.items()}
final_d = {a:"nan" if not b else b for a, b in new_d.items()}

输出:

{(3, 1): [(2, 1)], (10, 41): 'nan', (1, 1): [(2, 1)], (2, 1): [(3, 1), (1, 1)]}