我想知道是否有一种简单的方法可以在读取文件时在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'}
感谢任何帮助。
答案 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'}