2017-05-08 91 views
0

我正在研究確定圖形是否強連接的程序。Python可變輸入量

我正在讀取一系列行的標準輸入。

這些行包含兩個或三個以空格分隔的令牌,源和目標頂點的名稱以及可選的小數邊權重。

輸入可能是這樣的:

''' 
Houston Washington  1000 
Vancouver Houston 300 
Dallas Sacramento   800 
Miami   Ames 2000 
SanFrancisco LosAngeles 
ORD PVD 1000 
''' 

我怎麼能在這個輸入讀取,並將其添加到我的圖表? 我相信我將使用一個集合是這樣的:

flights = collections.defaultdict(dict) 

感謝您的幫助!

+0

你能告訴一些代碼,會寫這樣做。 – yeniv

+0

@yeniv如果我要在我的代碼中手動插入它,它應該是這樣的:'航班['華盛頓'] ['休斯敦'] = 800'或'航班['休斯敦'] ['亞特蘭大'] = 500' – Coder117

回答

1

d作爲你的數據,你可以使用'\ n'分割你的行,然後去掉尾部空格並找到最後一次出現的。有了這個,你可以切分你的字符串來獲取名字和與之相關的數字。

這裏我將數據存儲到字典中。您可以根據您的要求修改它!

使用正則表達式模塊re.sub刪除多餘的空格。

>>> import re 
>>> d 
'\nHouston Washington  1000\nVancouver Houston 300\nDallas Sacramento   800\nMiami   Ames 2000\nSanFrancisco LosAngeles\nORD PVD 1000\n' 
>>>[{'Name':re.sub(r' +',' ',each[:each.strip().rfind(' ')]).strip(),'Flight Number':each[each.strip().rfind(' '):].strip()} for each in filter(None,d.split('\n'))] 
[{'Flight Number': '1000', 'Name': 'Houston Washington'}, {'Flight Number': '300', 'Name': 'Vancouver Houston'}, {'Flight Number': '800', 'Name': 'Dallas Sacramento'}, {'Flight Number': '2000', 'Name': 'Miami Ames'}, {'Flight Number': 'LosAngeles', 'Name': 'SanFrancisco'}, {'Flight Number': '1000', 'Name': 'ORD PVD'}] 

編輯:

以符合您的航班快譯通,

>>> flights={'Houston':{'Washington':''},'Vancouver':{'Houston':''}} #sample dict 
>>> for each in filter(None,d.split('\n')): 
...  flights[each.split()[0]][each.split()[1]]=each.split()[2] 
+0

謝謝,但我想我正在更多地考慮這一點:如果我要手動將其插入到我的代碼中,它將如下所示:'航班['Washington'] ['Houston'] = 800'或'航班['休斯敦'] ['亞特蘭大'] = 500'我該如何調整您的代碼以適應此? – Coder117

+0

非常感謝! – Coder117

+0

現在我收到一個錯誤,說'd'沒有定義。我希望能夠從標準輸入讀取,以便有人可以輸入不同的輸入量。我該如何解決這個錯誤? – Coder117