Предполагая, что вы хотите включить 5
в качестве ключа в свой результат, вы можете использовать рекурсию для создания желаемого словаря:
import math, collections
data = {0.0: [0.0, 0.0], 1.0: [1.0, 0.0], 2.0: [2.0, 0.0], 3.0: [3.0, 0.0], 4.0: [1.5, 0.5], 5.0: [2.5, 0.5], 6.0: [-1.0, 0.0], 7.0: [-2.0, 0.0], 8.0: [-3.0, 0.0], 9.0: [-2.5, -0.5]}
def group(d, start, seen = []):
x, y = d[start]
r = [a for a, [j, k] in d.items() if a != start and a not in seen and math.hypot(abs(x-j), abs(y-k)) <= 1]
if not r:
return {}
result = {start:r}
for i in r:
result.update(group(d, i, seen+[start, *r]))
return result
result = group(data, 0)
Вывод:
{0: [1.0, 6.0], 1.0: [2.0, 4.0], 2.0: [3.0, 5.0], 4.0: [5.0], 5.0: [3.0], 6.0: [7.0], 7.0: [8.0, 9.0]}
Преобразование значений в строки:
new_result = {str(int(a)):list(map(str, map(int, b))) for a, b in result.items()}
Вывод:
{'0': ['1', '6'], '1': ['2', '4'], '2': ['3', '5'], '4': ['5'], '5': ['3'], '6': ['7'], '7': ['8', '9']}