我有一个看起来像这样的文件。
1,2,Room1 # first is the current room, the rest of the numbers the neighbours - maximum 4, and the last the name of the room
2,1,5,Room2
5,2,332,Room3
....等等
我想解析它以便使用BFS算法。我试过了:
with open( "data.txt", "r" ) as input_data:
input_list= [map(int,num.split()) for num in input_data.readlines()]
我希望有一个这样的字典才能应用BFS:
data = { '1':['2'], '2':['1','5'] .....}
任何想法如何解析它?
答案 0 :(得分:2)
您的输出包含字符串,因此您可以跳过int
来电。
如果第一个元素是关键,其余的值(忽略房间名称),字典理解就足够了:
with open( "data.txt", "r" ) as input_data:
data = {elems[0]: elems[1:-1]
for line in input_data for elems in (line.split(','),)}
for elems in (line.split(','),)
部分只分配一个值(line.split(',')
的输出到elems
;它可以解决理解语法中的限制。
由于这是逗号分隔的数据,我在这里使用csv
module:
import csv
with open( "data.txt", "rb" ) as input_data:
reader = csv.reader(input_data)
data = {row[0]: row[1:-1] for row in reader}
如您所见,这简化了每条线的处理。
根据需要添加int()
次来电:
data = {int(row[0]): map(int, row[1:-1]) for row in reader}
答案 1 :(得分:0)
with open( "data.txt", "r" ) as input_data:
input_list= input_data.readlines()
new_dict = {}
for mem in input_list:
a = mem.split(',')
new_dict[a[0]] = a[1:len(a) - 1]
print new_dict
//{'1': ['2'], '2': ['1', '5'], '5': ['2', '332']}
可能会更加优化