Преобразование списка списков в граф
Есть вот такой список (условно 3 на 3, но будет лучше если можно будет увеличить его)
simple_example = [
[3, 0, 4],
[5, 7, 1],
[2, 6, 8]
]
Нужна функция, которая сможет преобразовать такой список в граф следующего вида
Запись такого графа должна выглядеть вот так
graph = {
3:[{'node':5, 'price':1}, {'node':0, 'price':1}],
0:[{'node':3, 'price':1}, {'node':7, 'price':1}, {'node':4, 'price':1}],
4:[{'node':0, 'price':1}, {'node':1, 'price':1}],
5:[{'node':3, 'price':1}, {'node':7, 'price':1}, {'node':2, 'price':1}],
# и т.д
}
Функция должна принимать в качестве аргумента нужный нам список списков, а на выходе выдавать граф.
Я попытался найти какие-нибудь закономерности, наложил граф на систему координат, где ось ординат была перевернута (что бы совпадала с индексированием в Python). Вроде что-то есть, но много условностей.
Ответы (1 шт):
Решение в точном соответствии с тем, что вы написали. Если же у вас условие предполагало нечто другое, то, надеюсь, легкую модификацию задачи вам будет сделать самостоятельно не сложно:
simple_example = [
[1,2,3],
[4,5,6],
[7,8,9]
]
simp=np.array(simple_example)
n=simp.shape[0]
graph = {}
def pruff_neighbors(simp,i,j):
neighbors=[(i-1,j),(i,j-1),(i,j+1),(i+1,j)]
nodes=[]
for nb in neighbors:
if (nb[0]>=0 and nb[1]>=0 and nb[0]<n and nb[1]<n):
nodes.append(simp[nb[0],nb[1]])
return nodes
for i in range (n):
for j in range(n):
print('j',j)
nodes=pruff_neighbors(simp,i,j)
graph[simp[i,j]]=[{'node':nb,'price':1} for nb in nodes]
print (graph)
Результат:
{1: [{'node': 2, 'price': 1}, {'node': 4, 'price': 1}],
2: [{'node': 1, 'price': 1}, {'node': 3, 'price': 1}, {'node': 5, 'price': 1}],
3: [{'node': 2, 'price': 1}, {'node': 6, 'price': 1}],
4: [{'node': 1, 'price': 1}, {'node': 5, 'price': 1}, {'node': 7, 'price': 1}],
5: [{'node': 2, 'price': 1}, {'node': 4, 'price': 1}, {'node': 6, 'price': 1}{'node': 8, 'price': 1}],
6: [{'node': 3, 'price': 1}, {'node': 5, 'price': 1}, {'node': 9, 'price': 1}],
7: [{'node': 4, 'price': 1}, {'node': 8, 'price': 1}],
8: [{'node': 5, 'price': 1}, {'node': 7, 'price': 1}, {'node': 9, 'price': 1}],
9: [{'node': 6, 'price': 1}, {'node': 8, 'price': 1}]}