我有一个.txt文件,其中包含“主题,值,工作负载”格式的多行,我想以dict [subect] :( value,workload)格式打印到字典中。这是我的代码:
for line in inputFile:
lineList.append(line.split(",", 3))
for i in range(0, len(lineList)):
subjectDict[lineList[i][0]] = (lineList[i][1], lineList[i][2])
print subjectDict[lineList[i][0]]
但是,运行该程序时,我的subjectDict值将以这种格式返回元组:“'6','2 \ r \ n'。”这个r \ n业务有什么用?我假设它与文本文件中的换行符有关,这就是为什么我首先在我的split方法中放入3个最大值,但它似乎是将2 \ r \ n解释为一个字符串。另外,是否有更有效的方法将元组中的这些列表项转换为整数,或者我应该这样做:
subjectDict[lineList[i][0]] = (int(lineList[i][1]), int(lineList[i][2]))
感谢。
答案 0 :(得分:1)
执行以下操作:
for line in inputFile:
lineList.append(line.strip().split(",", 3))
for i in range(0, len(lineList)):
subjectDict[lineList[i][0]] = (lineList[i][1], lineList[i][2])
print subjectDict[lineList[i][0]]
strip方法将删除字符串开头和结尾的任何空格(包括\ r \ n字符)。 \ r \ n是行结尾(\ r \ n表示您可能正在打开Windows文件,Linux / Mac文件通常使用\ n作为行结尾)。
据我所知int(someStrVar)是转换为整数的最有效方法。
假设您以后对此lineList不感兴趣,可以执行以下操作:
for line in inputFile:
lineSplit = line.strip().split(",", 3)
subjectDict[lineSplit [0]] = (lineSplit [1], lineSplit [2])
print subjectDict[lineSplit [0]]
答案 1 :(得分:1)
试试这个:
output_dict = {}
with open(r"filename.txt") as f:
for line in f:
line = line.strip() # remove newlines and such (the '/r/n' bit)
subject, value, workload = line.split(',', 3)
output_dict[subject] = (int(value), int(workload))
所以,我做了几处改动。我使用line.strip()
从字符串中删除任何换行符(以及周围的空格)。为了提高效率,我还将你所拥有的两个循环合二为一。
要将元组中的每个项目转换为int,您可以执行以下操作:
my_tuple = tuple(int(i) for i in my_tuple)
...这基本上是一个转换为元组的生成器理解,但鉴于你只有两个要转换的项目,只需键入int(value)
和int(workload)
就更有意义了,特别是你不再需要输入像int(lineList[i][1])
那样笨重的东西。
答案 2 :(得分:1)
以下是我的建议,使用列表理解:
with open(r"test.txt") as f:
reBuff = [x.split(",") for x in f.readlines()]
outDict = dict([(subject.strip(), (int(value.strip()), int(workload.strip()))) for subject,value,workload in reBuff])
如果您有[(key, value),(key, value)]
格式的列表或元组,则可以轻松将其转换为字典。