如何将文件中的行解析为多个列表

时间:2014-06-10 10:16:46

标签: python algorithm parsing

我有一个看起来像这样的文件。

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'] .....}

任何想法如何解析它?

2 个答案:

答案 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']}

可能会更加优化