按连接顺序对线段进行排序
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]
我有一个包含线 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]