我正在尝试读取由关键字分隔的文本文件。我正在使用字典来组织与每个部分相对应的信息。例如,对于文本文件:
*VERTICES
1 0 0
2 10 0
3 10 10
4 0 10
*EDGES
1 1 2
2 1 4
3 2 3
4 3 4
有*EDGES
和*VERTICES
部分。我的目标是制作一本类似的字典:
dict = {'*VERTICES': [[0,0], [0,10], [10,0], [10,10]], '*EDGES': [[1,2], [1,4], [2,3], [3,4]]}
这是我的代码:
with open('c:/geometry.txt','r') as inputfile:
xyz = []
dic = {}
key = None
for line in inputfile:
line = line.replace(',','')
linelist = ' '.join(line.split())
linelist = linelist.split(' ')
if(linelist[0][0]=='*'):
key = linelist[0]
dic[key] = []
else:
for i in range(0,len(linelist)):
string2float = float(linelist[i])
xyz.append(string2float)
dic[key].append(xyz)
del xyz[:]
print(dic)
这是当前的输出:
{'*VERTICES': [[], [], [], []], '*EDGES': [[], [], [], []]}
如您所见,空。我猜测错误位于 dic[key].append(xyz) 行。我做错了什么?我注意到,如果我尝试附加行列表(例如 dic[key].append(linelist)
),代码可以正常工作,但我不会将变量从字符串转换为 float 。
有什么方法可以让它与 xyz( float )列表一起使用吗?谢谢
最佳答案
代码的最后几行没有执行您希望它们执行的操作:
dic[key].append(xyz)
del xyz[:]
您将对 xyz
列表的引用附加到字典中的列表中,但您正在删除列表的内容。切片上的 del
语句会就地修改列表,因此存储在字典中的引用随后也会看到空列表结果。
事实上,字典中的所有空内部列表都是对同一个空 xyz
列表的引用。您可能想要做的是实际为 xyz
创建一个新列表,而不是删除其内容:
dic[key].append(xyz)
xyz = []
或者,更好的是,使用列表理解来构建新列表及其内容,并完全删除 xyz
变量:
else:
dic[key].append([float(num) for num in linelist])
请注意,这将包括内部字典中文件中的所有三个值。如果您只想要两个,您可能需要对 linelist
进行切片。
关于python - 将列表追加到字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35690970/