屬性
NetworkX 的節點、邊、整張圖都是「可以掛字典」的。顏色、權重、時間戳、原始列資料,都放這裡,不必另建對照表(當然也可以)。
三種層級
import networkx as nx
G = nx.Graph(name="示範網路") # 圖層屬性
G.graph["day"] = "Monday"
G.add_node(1, role="source")
G.nodes[1]["color"] = "red"
G.add_edge(1, 2, weight=4.2, relation="friend")
G.edges[1, 2]["weight"] = 5.0
G.graph:整張圖的 metadata。G.nodes[n]:節點n的屬性字典。G.edges[u, v]:邊的屬性字典;Multi 圖還要加 edge key。
下標寫入前,節點或邊必須已經存在。
weight 為什麼特別
許多演算法約定用屬性名稱 weight:
權重大於 0 通常表示距離或成本;若你的數字其實是「親密程度」(越大越近),最短路徑前要先轉換,例如用倒數當距離。
一次讀出資料
G.nodes(data=True) # (node, attr_dict)
G.nodes(data="color") # (node, color_or_None)
G.edges(data=True)
G.edges(data="weight", default=1)
data= 可以是 True(整個字典)或某個鍵名。缺值時可用 default=。
用下標走鄰居
無向圖走 G.adjacency() 時,每條邊會出現兩次(兩端各一次)。寫加總時記得處理這個對稱。
屬性不是欄位綱要
NetworkX 不強制每個節點都有相同的鍵。缺的鍵就是沒有。分析前可用 nx.get_node_attributes(G, "color") 一次抽出某欄,回傳 {node: value} 字典。