В networkx, graph.nodes(data=True)
возвращает список кортежей node_id-dicts с аргументами узла.Но в Python нельзя сравнивать дикты (вы пытаетесь сравнить их, когда вызываете функцию max
).Вы должны сделать это другим способом, например, извлечь конкретный аргумент каждого узла с помощью кода, подобного следующему:
max([y['some_argument'] for x,y in largest_cc.nodes(data=True)])
^
|
Add it ----+
Вот пример:
Мы создаем случайный графи заполните аргумент 'arg' случайными числами:
import networkx as nx
import random
G = nx.gnp_random_graph(10,0.3,directed=True)
for node in G.nodes:
G.nodes[node]['arg'] = random.randint(1, 10)
Затем мы пытаемся использовать ваш код:
[y for x,y in G.nodes(data=True)]
Возвращает:
[{'arg': 8},
{'arg': 5},
{'arg': 9},
{'arg': 4},
{'arg': 8},
{'arg': 6},
{'arg': 3},
{'arg': 2},
{'arg': 8},
{'arg': 1}]
И вы не можете сравнить эти диктовки друг с другом.
Но если вы укажете 'arg' в списке:
[y['arg'] for x,y in G.nodes(data=True)]
Он вернет:
[8, 1, 5, 3, 10, 5, 7, 10, 1, 2]
И вы можете выбрать самый большой элемент (но не пишите .values()[0]
в конце строки, он будетвызвать ошибку):
max([y['arg'] for x,y in G.nodes(data=True)])
10