按连接顺序对线段进行排序

Sort Line Segments in Order of Connections

我有一个包含线 ID 及其 2 个对应点 X、Y 坐标的字典。 2个点不保证按照起点、终点的顺序。 我需要按照 ID 的连接方式对列表进行排序。

d= { 34:((3,5), (2,5)), 82:((1,1), (1,2)), 2:((8,4), (3,5)), 13:((1,2), (2,5))}

我将有一个 startEdge 和 startPt 示例: startEdge = 82 startPt = 1,1

我想我需要某种迭代器,但没有取得太大的成功。我的项目可能有多达 200 多个线段,所以我尽量不减慢脚本的速度。任何帮助都会很棒

编辑:到目前为止,这是我开始尝试的...但不确定如何将其循环使用

def get_key(val, my_dict):
    for key, value in my_dict.items():
        if val in value[0]:
            currEdge = key
            currPt = value[0]
            nextPt = value[1]
        if val in value[1]:
            currEdge = key
            currPt = value[1]
            nextPt = value[0]

一些说明,有时 startEdge 会在我不希望路径经过的一侧有一些其他边,因此我需要给它一个方向,或“startPoint”

这是一种解决方案。我很想看看它在更大的字典上的表现如何。

def create_path(start_edge, start_point, dic):
    lst=[]
    edge = start_edge
    tail = start_point

    while len(dic.keys()) > len(lst):
        head = next(filter(lambda x: x != tail, dic[edge]))
        for e, points in dic.items():
            if head in points and e not in lst:
                lst.append(e)
                edge = e
                tail = head
    return lst

d= { 34:((3,5), (2,5)), 82:((1,1), (1,2)), 2:((8,4), (3,5)), 13:((1,2), (2,5))}
print(create_path(82, (1,1),d))

#output: [82, 13, 34, 2]

对于Python 2.7,只需将lambda表达式替换为此代码块即可找到头部:

    if tail == dic[edge][0]:
        head = dic[edge][1]
    else:
        head = dic[edge][0]