[英]Convert multilevel dictionary into a network graph in Python
我陷入一個奇怪的問題。 我正在從CSV文件中讀取數據,並將其轉換為多級字典。
CSV格式:CSV文件中總共有1,500行,請參見以下格式。
1-103rd Street,1-96th Street,2327.416174
1-116th Street–Columbia University,1-Cathedral Parkway–110th Street,2327.416174
1-125th Street,1-116th Street–Columbia University,2327.416174
1-137th Street–City College,1-125th Street,2327.416174
1-145th Street,1-137th Street–City College,2327.416174
1-14th Street,1-Christopher Street–Sheridan Square,2327.416174
在上面的文件中,第一列表示源站點,第二列表示目標站點,第三列提供它們之間的距離。
我將必須應用Dijkstra算法來找到兩個站點之間的最短距離,為此,我需要將整個CSV文件轉換為加權圖,其中每個站點都是一個節點,它們之間的距離就是邊緣的權重。
我的方法:
首先,我從CSV文件中讀取每一行,並將其轉換為多級字典。 我為此得到了適當的字典。 下面是我的代碼。
my_dict = {}
with open('final_subway_data.csv') as f_input:
for row in csv.reader(f_input):
my_dict[row[0]] = {row[1]: row[2]}
現在,我需要將此新創建的字典轉換為圖形,以應用Dijkstra的算法。 為此,我正在使用此代碼:
G = nx.from_dict_of_dicts(my_dict)
但是我收到一條錯誤消息,提示"TypeError: Input graph is not a networkx graph type"
。
請幫我。 如何將整個CSV文件轉換為圖形,以便應用Dijkstra的算法來查找任何兩個站之間的最短距離。
我對NetworkX不太熟悉,但是我會使用pandas和nx.from_pandas_dataframe()進行以下操作。
import pandas as pd
import networkx as nx
df = pd.read_csv('csvpath.csv', names=['origin', 'dest', 'dist'])
g = nx.from_pandas_dataframe(df, source='origin', target='dest', edge_attr='dist')
g['1-103rd Street']['1-96th Street']['dest']
# 2327.416174
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.