python - 将列表追加到字典中

标签 python python-3.x dictionary text-files

我正在尝试读取由关键字分隔的文本文件。我正在使用字典来组织与每个部分相对应的信息。例如,对于文本文件:

*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/

相关文章:

python - 第一个 HTTPS 请求比其他请求花费更多时间

python - Arduino-pyFirmata-Python windows error(5,access denied)

python - 无法从 http 请求获取 json 响应

python - 将结果分配给虚拟变量 _

python - 类 python 中的 IndentationError

python - dict.get(key, default) 与 dict.get(key) 或 default

python - 根据字典替换列中的值 (Pandas)

python - Pygame:如何旋转表面积而不使图像闪烁两次?

python - 如果 else 功能无法正常工作

python - 从现有词典创建频率词典