在读取文件时在循环中添加到字典

时间:2016-02-21 06:35:45

标签: python python-2.7 dictionary

我想知道是否有一种简单的方法可以在读取文件时在for循环中添加字典。 我有一个file.txt,我想逐行读取它,然后将它们添加到字典中。 我尝试了以下但是无法将所有行添加为关键字:同一字典中的值。

content of file.txt
name1:value1
name2:value2
name3:value3


 with open("file.txt", 'r') as fd:
        for line in fd.readlines():
            d=dict([line.rstrip().split(":")])
            d.update(d)

最终,我希望我的字典有这样的东西: d = {'Name1':'Value1','Name2':'Value2','Name3':'Value3'}

感谢任何帮助。

6 个答案:

答案 0 :(得分:3)

你需要在循环之外声明dict并在里面更新它。这是一个范围问题。

 d={}
 with open("file.txt", 'r') as fd:
    for line in fd.readlines():
        d_tmp=dict([line.rstrip().split(":")])
        d.update(d_tmp)

答案 1 :(得分:2)

在循环的每次迭代中,您创建一个名为def createDict(fileName): ''' Returns a dict of fileName ''' data = {} #init dict file = open(fileName, 'rb').readlines() #open File and create list of each line for i in file: #loop through each file i = i.replace('\r', '').replace('\n', '').split(':') #replace all instances of \n and \r and split at : data[i[0]] = i[1] #add values to dict return data #return dict 的{​​{1}},尝试自行更新它,然后丢弃它。由于dict在初始化时采用序列,因此您可以一步创建

d

答案 2 :(得分:2)

无需拨打' readlines',文件对象支持iter协议。致电' readlines'将整个文件拉入内存

>>> d = {}
>>> with open('var.txt') as myfile:
...     for line in myfile:
...         name, val = line.split(':')
...         d[name] = val
... 
>>> d
{'name2': 'value2\n', 'name1': 'value1\n'}

您可以通过执行以下操作来删除字典值上的行返回:

d[name] = val.strip()

答案 3 :(得分:1)

可能效率不高但是有效!祝你好运!!!

continue;

答案 4 :(得分:1)

这是另一个解决方案(我看起来更清楚):

>>> with open("sample", 'r') as fd:
...  for line in fd.readlines():
...   row = line.rstrip().split(":")
...   d[row[0]] = row[1]
... 
>>> d
{'name3': 'value3', 'me1': 'value1', 'name2': 'value2'}

答案 5 :(得分:1)

假设文件始终存在且可读,花哨一个班轮。

>>> dict(line.rstrip().split(':') for line in open('file.txt'))

{'name2': 'value2', 'name3': 'value3', 'name1': 'value1'}