Я новичок как для Python, так и для NetworkX. У меня есть квадрат, регулярный граф G
с NxN
узлами (a решетка). Такие узлы помечены с помощью dict
(см. Код ниже). Теперь я хочу, чтобы edgelist
возвращал начало и конечной точке каждого ребра, не ссылаясь на координаты узла, а на метку, указанную узлом.Замена значений `edgelist` на словаря` labels`
Пример:
N = 3
G=nx.grid_2d_graph(N,N)
labels = dict(((i, j), i + (N-1-j) * N) for i, j in G.nodes())
#This gives nodes an attribute ID that is identical to their labels
for (i,j) in labels:
G.node[(i,j)] ['ID']= labels[(i,j)]
edgelist=G.edges() #This gives the list of all edges in the format (Start XY, End XY)
Если я запускаю его с N=3
я получаю:
In [14]: labels
Out[14]: {(0, 0): 6, (0, 1): 3, (0, 2): 0, (1, 0): 7, (1, 1): 4, (1, 2): 1, (2, 0): 8, (2, 1): 5, (2, 2): 2}
Эта схема этикетки верхний левый узел как 0
, с узлом (N-1)th
помещаются в нижнем правом углу. И это то, чего я хочу. Теперь проблема с edgelist
:
In [15]: edgelist
Out [15]: [((0, 1), (0, 0)), ((0, 1), (1, 1)), ((0, 1), (0, 2)), ((1, 2), (1, 1)), ((1, 2), (0, 2)), ((1, 2), (2, 2)), ((0, 0), (1, 0)), ((2, 1), (2, 0)), ((2, 1), (1, 1)), ((2, 1), (2, 2)), ((1, 1), (1, 0)), ((2, 0), (1, 0))]
Я пытался решить проблему с этими линиями (вдохновение отсюда: Replace items in a list using a dictionary):
allKeys = {}
for subdict in (labels):
allKeys.update(subdict)
new_edgelist = [allKeys[edge] for edge in edgelist]
, но я получаю эту замечательную вещь, которая просвещает мой понедельник:
TypeError: cannot convert dictionary update sequence element #0 to a sequence
Подводя итог, я хочу иметь возможность заменить элементы edgelist
список со значениями словаря labels
, так что, скажем, край от ((2,0),(1,0))
(который соответствует узлам и) возвращается (8,7)
. Бесконечное спасибо!
спасибо. У меня действительно было много проблем с чатом, так что да, меня не уведомили. Прошу прощения за то, что я не читал об этом раньше. :) – FaCoffee
Btw, документация не очень полезна и описательна. Если 'G' - мой график, а' метки '- это те, которые были заданы в другом вопросе, как я могу быть уверен, что никаких переходов/ошибок/ошибок не будет? Думаю, это из-за того, как определяется «ярлыки», правильно? – FaCoffee
Я не совсем уверен, что понял ваш вопрос. Но да, определение меток важно для безупречных результатов. –