You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取文本文件转为字典列表?Python代码异常排查

问题排查:读取文本文件转换为字典列表时结果重复的问题

我有一个名为users.txt的文本文件,内容如下:

admin|123|admin
user|123|user

尝试编写Python代码将其读取并转换为字典列表[{}, {}],但运行结果不符合预期,相关信息如下:

实现代码

def read(file, mode, dictionary_keys, split_char):
    read_lists = []
    read_dict = {}

    try:
        f = open(file, mode)
    except FileNotFoundError as e:
        print(e)
        return False

    else:
        for i in f.readlines():
            for j in range(len(dictionary_keys)):
                key = dictionary_keys[j]
                value = i.strip().split(split_char)[j]

                read_dict[key] = value

            read_lists.append(read_dict)

        return read_lists

调用方式

user_dict = ['username', 'password', 'role']
a = read('users.txt', 'r', user_dict, '|')

print(a)

当前错误输出

[{'username': 'user', 'password': '123', 'role': 'user'}, {'username': 'user', 'password': '123', 'role': 'user'}]

期望输出

[{'username': 'admin', 'password': '123', 'role': 'admin'}, {'username': 'user', 'password': '123', 'role': 'user'}]

问题原因

问题出在字典对象的引用复用:read_dict是在循环外部定义的,每次循环只是修改这个字典里的键值对,而read_lists.append(read_dict)添加的是这个字典的引用,不是新的字典对象。所以最后列表里的两个元素指向的是同一个字典,最终显示的都是最后一次循环修改后的内容。

修复方案

把read_dict = {}的定义放到for i in f.readlines()循环的内部,每次循环创建一个新的字典对象,避免引用复用。

修改后的完整代码

def read(file, mode, dictionary_keys, split_char):
    read_lists = []

    try:
        f = open(file, mode)
    except FileNotFoundError as e:
        print(e)
        return False

    else:
        for i in f.readlines():
            # 每次循环创建新的字典
            read_dict = {}
            for j in range(len(dictionary_keys)):
                key = dictionary_keys[j]
                value = i.strip().split(split_char)[j]

                read_dict[key] = value

            read_lists.append(read_dict)

        return read_lists

验证后的输出

运行修改后的代码,调用方式不变,输出将符合期望:

[{'username': 'admin', 'password': '123', 'role': 'admin'}, {'username': 'user', 'password': '123', 'role': 'user'}]

内容的提问来源于stack exchange,提问作者James Wong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 05:35:26