【问题标题】:Python Variable Amount Of InputPython 可变输入量
【发布时间】:2017-05-08 02:48:02
【问题描述】:

我正在开发一个程序来确定一个图是否是强连接的。

我正在读取一系列行的标准输入。

这些行有两个或三个空格分隔的标记、源顶点和目标顶点的名称,以及一个可选的小数边权重。

输入可能如下所示:

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

如何读取此输入并将其添加到我的图表中? 我相信我会使用这样的集合:

flights = collections.defaultdict(dict)

感谢您的帮助!

【问题讨论】:

  • 你能展示一些可以编写的代码吗?
  • @yeniv 如果我要在我的代码中手动插入它,它看起来像这样:flights['Washington']['Houston'] = 800flights['Houston']['Atlanta'] = 500

标签: python dictionary input graph collections


【解决方案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]

【讨论】:

  • 谢谢,但我想我更多的是沿着这条线寻找:如果我要在我的代码中手动插入它,它看起来像这样:flights['Washington']['Houston'] = 800flights['Houston']['Atlanta'] = 500 我该如何调整你的代码适合这个吗?
  • 非常感谢!
  • 我现在收到一个错误,提示“d”未定义。我希望能够从标准输入中读取,以便有人可以输入不同数量的输入。我该如何解决这个错误?
  • import sys d = sys.stdin.read() flights = {} for each in filter(None, d.split('\n')): flights[each.split()[0]][each.split()[1]] = each.split()[2] 我现在的错误是:Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/program12.py", line 5, in <module> flights[each.split()[0]][each.split()[1]] = each.split()[2] KeyError: 'Houston'
猜你喜欢
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-27
  • 2020-03-03
相关资源
最近更新 更多