2017-05-08 129 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