簡體   English   中英

在Python中將多級字典轉換為網絡圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM