2017-11-14 17 views
0

networkx 2.0を使用すべてのエッジをループして追加のエッジ属性を動的に追加しようとします。グラフはMultiDiGraphです。エッジ属性を追加するとTypeErrorが発生します: 'AtlasView'オブジェクトはアイテム割り当てをサポートしていません

私が次のコードで行う方法を属性エッジを追加することが可能であるように思わtutorialによると:

g = nx.read_gpickle("../pickles/" + gname) 
yearmonth = gname[:7] 
g.name = yearmonth # works 
for source, target in g.edges(): 
    g[source][target]['yearmonth'] = yearmonth 

このコードは、次のエラーがスローされます。

TypeError: 'AtlasView' object does not support item assignment 

私は何間違っている?

+1

これはうまくいくはずです。 'g = nx.Graph();のような最小限の例を試すことができますか? g.add_nodes_from([0、1]); g.add_edge(0、1); g [0] [1] ['a'] = 'b''? – Paul

答えて

2

グラフがnx.MultiGraphの場合は、そうなるはずです。その場合、0からnまでの追加インデックスが必要です。ここで、nは、2つのノード間のエッジの数です。

試してみてください。

for source, target in g.edges(): 
    g[source][target][0]['yearmonth'] = yearmonth 

チュートリアルの例がnx.Graphを対象としています。