Member 14194093 Ответов: 3

Преобразование из списка в словарь


Я получил его для создания списка смежности в текущем формате:
carbongraph = {'(0, 1)': [(0, 2)], '(0, 2)': [(0, 1), (0, 3), (1, 2)], '(0, 3)': [(0, 2)], '(1, 2)': [(0, 2), (2, 2)], '(2, 2)': [(1, 2)]}

Но этот формат не будет работать для моего алгоритма самого длинного пути, он дает следующую ошибку
TypeError: object of type 'NoneType' has no len()

но он почему-то будет работать в следующем формате:
 carbongraph = {'(0, 1)':['(0, 2)'], '(0, 2)':['(0, 1)','(0, 3)','(1, 2)'],
'(0, 3)':['(0, 2)'], '(1, 2)' :['(0, 2)','(2, 2)'], '(2, 2)':['(1, 2)']}

Итак, как мне преобразовать текущий формат в требуемый формат

Что я уже пробовал:

grid = [[0,1,1,1],
        [0,0,1,0],
        [0,0,1,0]]
        
lst = []
for rows, row in enumerate(grid) :
    for cols, col in enumerate(row) :
        if grid[rows][cols] in [1] :
            lst.append((rows, cols))
            
       
print (lst)
        

adjacencylist = []

def adjacentnode(nodea,nodeb):
    if nodea[0] == nodeb[0] and nodea[1] == nodeb[1] + 1:
        adjacent = True
    elif nodea[0] == nodeb[0] and nodea[1] == nodeb[1]-1:
        adjacent = True
    elif nodea[1] == nodeb[1] and nodea[0] == nodeb[0]+1:
        adjacent = True
    elif nodea[1] == nodeb[1] and nodea[0] == nodeb[0]-1:
        adjacent = True
    else:
        adjacent = False
    return adjacent

#Below is where conversion happens
carbongraph = {}
for node in range(len(lst)):
    adjacencylist.append((lst[node],[]))
    for neighbour in range(len(lst)):
        adjacentnodes = (adjacentnode(lst[node],lst[neighbour]))
        
        if adjacentnodes == True:
            adjacencylist[node][1].append(lst[neighbour])
        
for item in adjacencylist:
    carbongraph[str(item[0])] = (item[(1)])
    for adj in item[1]:
        adj = str(adj)
    
def shortestpath(graph, start, end, path = []):
  path = path + [start]
  if start == end:
      return path
  if start not in graph:
      return None
  for node in graph[start]:
      if node not in path:
          newpath = shortestpath(graph, node, end, path)
          if newpath: 
            return newpath
  return None

LeafArray = []
for leaf in carbongraph:
  degree = (len(carbongraph[leaf]))
  if degree == 1:
    
    LeafArray.append(leaf)
print(LeafArray)

chainlist = []
for node in LeafArray:
    for neighbour in LeafArray:
      currentpath = (shortestpath(carbongraph,node,neighbour))
      carbonchain = len(currentpath)#error occurs here
      print (currentpath)
      chainlist.append(carbonchain)
      
longestchain = max(chainlist)
print (longestchain)

def Prfix():
  if longestchain == 4:
    prefix = "But"
  elif longestchain == 5:
    prefix = "Pent"
  elif longestchain == 6:
    prefix = "Hex"
  elif longestchain == 7:
    prefix = "Hept"
  elif longestchain == 8:
    prefix = "Oct"
  return prefix

print (Prfix())

3 Ответов

Рейтинг:
1

Richard MacCutchan

Вам нужно посмотреть на списки и список постижений для предложений. Видеть 5. структуры данных — документация Python 3.7.3[^].


Maciej Los

5ed!

Рейтинг:
1

Patrice T

Цитата:
Преобразование из списка в словарь

Здесь нет словаря, вам нужно преобразовать строку из данного формата в другой формат.
Я бы использовал регулярное выражение 2 раза, чтобы заменить внешние символы ("[]") и еще один для каждого элемента.
Цитата:
Это все, что мне нужно для завершения моей курсовой работы, пожалуйста, помогите,

Мы более чем готовы помочь вам, но не делаем за вас домашнее задание. И единственная проблема, о которой вы сказали, это то, что у вас есть домашнее задание.
Домашнее задание не предназначено для проверки ваших навыков просить других людей сделать вашу работу, оно предназначено для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание курсов, которые вы прошли, а также проблем, которые вы испытываете при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по исправлению положения.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".
Так что попробуйте, перечитайте свои уроки и приступайте к работе. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.


Richard MacCutchan

Это неверно; существуют различные функции Python, которые делают это возможным,

Member 14194093

Я отредактировал его, это просто вопрос о кодировании, который я задаю, спасибо

Patrice T

У вас есть какой-то код, который делает преобразование? или хотя бы попытаться.

Patrice T

Где находится код, который выдает ошибку?

Member 14194093

Ниже в основном показано, где происходит конвертация

карбонграф = {}
для узла в диапазоне(len(lst)):
adjacencylist.append((lst[узел],[]))
для соседа в диапазоне(len(lst)):
adjacentnodes = (adjacentnode(lst[узел],lst[сосед]))

если adjacentnodes == True:
adjacencylist[node][1].append(lst[neighbour])

для элемента в списке смежности:
carbongraph [(ул. элемента[0])] = (пункт[(1)])
для Рег элемента[1]:
ул. прил = (прил)

Ниже показано, где происходит ошибка
carbonchain = len(currentpath)

Patrice T

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