Генерация словаря
Необходимо сгенерировать словарь, ключом которого является вершина графа, а значением кортеж с именем той же вершины и вершины, с которой она соединяется.
Словарь должен содержать названия вершин из 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)}