Эффективное сравнение кортежа со списком

У меня есть список кортежей, где каждый кортеж содержит строковое представление координат XYZ. Мне нужно сравнить первое и второе значения кортежей с другим набором значений в словаре (чтобы определить, является ли первый элемент в кортеже начальной или конечной точкой)

т.е.

tuple_list = [('0.1, 0.5, 2.0', '3.0, 5.0, 6.0'), ('0.0, 0.6, 2.0', '4.0, 5.0, 6.0')]

vertex_dict = {'0': '3.0, 5.0, 6.0', '1': '0.0, 0.6, 2.0'}

если первый элемент в кортеже соответствует списку вершин, я хочу указать, что это точка "начала", а второй элемент в кортеже - точка "конца".

В настоящее время я выполняю это с помощью следующего кода:

pt_line_dict = {}
for key, value in vertex_dict:
    for i, j in tuple_list:
        if i == value:
            pt_line_dict[key] = (i, j)
        elif j == value:
            pt_line_dict[key] = (j, i)
        else:
            pass

Output:
pt_line_dict = {'0': ('3.0, 5.0, 6.0', '0.1, 0.5, 2.0'), '1': ('0.0, 0.6, 2.0', '4.0, 5.0, 6.0')}

Нет шансов иметь повторяющиеся значения между кортежами, и словарь вершин также уникален (без повторов ключевых значений).

Есть ли более эффективный способ сделать это, чтобы избежать зацикливания всех значений в списке кортежей? Я думаю, что генератор может быть способом сделать это...

1 ответ

Согласно "Нет никакой возможности иметь дубликаты значений между кортежами, и словарь вершин также уникален", и вам нужен более эффективный способ сделать это, избегая циклического перебора всех значений в списке кортежей - я могу только предложить решение, которое позволяет избежать избыточные итерации внутреннего цикла:

pt_line_dict = {}

for k,v in vertex_dict.items():
    for t in tuple_list:
        if v in t:
            idx = t.index(v)
            pt_line_dict[k] = (t[idx], t[int(not idx)])
            break

print(pt_line_dict)

Выход:

{'0': ('3.0, 5.0, 6.0', '0.1, 0.5, 2.0'), '1': ('0.0, 0.6, 2.0', '4.0, 5.0, 6.0')}
Другие вопросы по тегам