Skip to content

建立 2026-09-14 更新 2026-09-14

屬性

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

nx.shortest_path(G, 1, 2, weight="weight")
nx.betweenness_centrality(G, 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[1]          # 節點 1 的鄰居對照:{鄰居: 邊屬性}
G[1][2]       # 邊 (1, 2) 的屬性字典
G.edges[1, 2]

無向圖走 G.adjacency() 時,每條邊會出現兩次(兩端各一次)。寫加總時記得處理這個對稱。

屬性不是欄位綱要

NetworkX 不強制每個節點都有相同的鍵。缺的鍵就是沒有。分析前可用 nx.get_node_attributes(G, "color") 一次抽出某欄,回傳 {node: value} 字典。