将随机化属性添加到图形边



我试图通过以下代码将dict中属性的两个值中的一个随机添加到一些列出的图的每条边:

import networkx as nx
import random
Glist = []
for _ in range(12):
g = nx.erdos_renyi_graph(n = 20, p = random.random())
Glist.append(g)
for i in range(len(Glist)):
for u, v in Glist[i].edges():
attribs = {Glist[i].edges(): {'relation': random.choice(['friend', 'enemy'])}}
def set_Net_att(my_list, my_dict):
for _ in my_list:
for i in range(len(my_list)):
gatt = nx.set_edge_attributes(my_list[i], my_dict)
set_Net_att(Glist, attribs)
print(Glist[2].edges(data = True))

但我得到了这个错误:

TypeError                                 Traceback (most recent call last)
~AppDataLocalTemp/ipykernel_14600/893381260.py in <module>
14 for i in range(len(Glist)):
15     for u, v in Glist[i].edges():
---> 16         attribs = {Glist[i].edges(): {'relation': random.choice(['friend', 'enemy'])}}
17 
18 def set_Net_att(my_list, my_dict):
TypeError: unhashable type: 'EdgeView'

我怎样才能完成任务?我真的很感谢你的支持。

您没有正确地为函数set_edge_attributes构造字典(而且,通常,在代码中使用了太多非Python特性(。以下是一个正确的(改进的(解决方案:

# Build a list of graphs
glist = [nx.erdos_renyi_graph(n = 20, p = random.random()) for _ in range(12)]
# Generate and assign attributes
for g in glist:
attribs = {edge: random.choice(['friend', 'enemy']) for edge in g.edges}
nx.set_edge_attributes(g, attribs, "relation")

最新更新