преобразуйте график, представленный строкой пар ключ-значение, в словарь. Python

#python

#python

Вопрос:

учитывая карту, представленную строкой двузначных чисел, разделенных запятыми, например, «12,23,34,45,56,67,78,81», где каждая пара цифр представляет путь между двумя цифрами, преобразуйте строку в график, представленный словарем с ключами в качестве источников (цифр) и значениями в качестве доступных мест назначения из key. e.g 1:[2,8], 2[3] и т.д. Это моя очень уродливая попытка:

 def path(way):
x = way.split(',')
y = sorted(set(tele.replace(',','')))
graph = dict()
for i in x:
    for j in range(len(i)):
        for h in y:
            if h in i and i[j] != h:
                if h in graph:
                    graph[h].append((i[j]))
                else:
                    graph[h] = [(i[j])]
return graph
  

После этого я намерен реализовать алгоритм поиска в ширину, чтобы найти наилучший путь. Извините, если мое объяснение неясно. Любая помощь была бы очень признательна, спасибо!

Комментарии:

1. что это 1:[2,8] значит? это неориентированный граф?

2. Да, извините за неясное объяснение. Это означает, что из точки 1 вы можете перейти либо к точке 8, либо к точке 2.

Ответ №1:

 # this initializes values in the dictionary d with empty lists
# so that we can directly call .append() without checking "if key in keys"
from collections import defaultdict
d = defaultdict(list)

# your input string
s = "12,23,34,45,56,67,78,81"

# iterate through digit pairs
for pair in s.split(","):
  # get single digits from a pair
  fr = pair[0]
  to = pair[1]

  # add edges in both directions (undirected)
  d[fr].append(to)
  d[to].append(fr)

# see what we got
print d
  

Результат

 {'1': ['2', '8'], '3': ['2', '4'], '2': ['1', '3'], '5': ['4', '6'], '4': ['3', '5'], '7': ['6', '8'], '6': ['5', '7'], '8': ['7', '1']}
  

Комментарии:

1. Возможно, стоит рассмотреть наборы значений, чтобы избежать дублирования путей.

2. Это было бы очень полезно. Любой совет о том, как подойти к этому? Извините, я относительно новичок в программировании. Спасибо @wwii

3. Используйте набор вместо списка для defaultdict . Используйте метод (set) add вместо метода (list) append для добавления ребер / узлов / путей. Взгляните на документы Python, чтобы увидеть дальнейшее объяснение этих типов и методов.