Генерация словаря

Необходимо сгенерировать словарь, ключом которого является вершина графа, а значением кортеж с именем той же вершины и вершины, с которой она соединяется.

Словарь должен содержать названия вершин из rnd_letters в количестве равном длине вектора vector_in.

На выходе должен быть следующий результат (условно):

"A" : ("A","B"),
"B" : ("B","C"),
"C" : ("C","A")

Не могу понять как это сделать, код прилагаю.

import random
import networkx as nx
import matplotlib.pyplot as plt

letters = ('A', 'B', "C", "D", "E", "F", "G", "H", "K", "L")
vector_in = (2, 2, 2)
rnd_letter = list(random.sample(letters, len(vector_in)))

# connect = {
#     rnd_letter[0]: (rnd_letter[1], rnd_letter[2]),
#     rnd_letter[1]: (rnd_letter[0], rnd_letter[2]),
#     rnd_letter[2]: (rnd_letter[0], rnd_letter[1])
# }

connect = {rnd_letter[i]: tuple(rnd_letter[i] + rnd_letter[i+1]) for i in range(len(rnd_letter)-1)}

print(connect)

Ответы (2 шт):

Автор решения: Алексей Р
import random

letters = ('A', 'B', "C", "D", "E", "F", "G", "H", "K", "L")
vector_in = (2, 2, 2)
rnd_letter = random.sample(letters, len(vector_in))
connect = {letter: (letter, rnd_letter[(i + 1) % len(rnd_letter)]) for i, letter in enumerate(rnd_letter)}
print(connect)
{'G': ('G', 'L'), 'L': ('L', 'D'), 'D': ('D', 'G')}
→ Ссылка
Автор решения: r3b0rn
letters = ('A', 'B', "C", "D", "E", "F", "G", "H", "K", "L")
rnd_letter = ['A', "E", "L"]
l = len(letters)


connect = {rnd_letter[i]: (rnd_letter[i], letters[(letters.index(rnd_letter[i])+1) % l]) for i in range(len(rnd_letter))}

print(connect)

{'A': ('A', 'B'), 'E': ('E', 'F'), 'L': ('L', 'A')}

Используйте % и будет вам счастье) А вообще лучше записать это в несколько строк, читабельнее будет

P.S. Для учета порядка rnd_letters:

l = len(rnd_letter)
connect = {rnd_letter[i]: (rnd_letter[i], rnd_letter[(i+1)%l]) for i in range(l)}
→ Ссылка