向图边添加随机化属性

Adding randomized attributes to graph edges

我尝试通过以下代码将字典中属性的两个值之一随机添加到某些列出的图形的每个边缘:

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)
~\AppData\Local\Temp/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 的字典(并且通常在您的代码中使用了太多非 Pythonic 功能)。这是一个正确的(改进的)解决方案:

# 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")