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

Python循环中向列表追加字典的问题及修正需求

解决JSON读取后生成连续ID字典列表的问题

看起来你现在遇到的问题是:读取students.txt后得到的字典列表里全是重复的{'id': 1, 'first_name': 'name1'},但你想要的是id从1到10的连续字典列表对吧?我来帮你分析下原因和解决办法:

问题根源

你的代码逻辑本身没问题,但当前students.txt文件里的每一行都是完全相同的JSON对象(都是id=1的那条),所以循环读取10次后,自然会得到10个重复的字典。另外你的打印代码还有个小笔误:print(studentList)应该写成print(student),不然每次会打印整个列表而不是单个元素。

解决方案分两种情况:

情况1:你想基于文件里的基础模板生成10条连续ID的数据

如果students.txt里只有一条基础JSON(比如就是那行id=1的数据),想扩展成id从1到10的列表,可以这么改代码:

import json

studentsList = []
# 先读取文件里的基础模板数据
with open('students.txt') as f:
    # 假设文件里只有一行基础JSON
    base_student = json.loads(f.readline())

# 生成id从1到10的字典列表
for i in range(1, 11):
    # 复制基础字典,避免所有元素指向同一个对象
    student = base_student.copy()
    student['id'] = i
    # 如果名字也需要对应id,可以改成下面这样,不需要的话可以删掉
    student['first_name'] = f'name{i}'
    studentsList.append(student)

# 打印结果
print("生成的ID连续的字典列表:")
for student in studentsList:
    print(student)

情况2:你希望读取文件里本来就有的10条不同ID的数据

这种情况下需要先修正students.txt的内容,确保每一行是不同id的JSON,比如:

{"id":1,"first_name":"name1"}
{"id":2,"first_name":"name2"}
{"id":3,"first_name":"name3"}
{"id":4,"first_name":"name4"}
{"id":5,"first_name":"name5"}
{"id":6,"first_name":"name6"}
{"id":7,"first_name":"name7"}
{"id":8,"first_name":"name8"}
{"id":9,"first_name":"name9"}
{"id":10,"first_name":"name10"}

然后修正你原来代码里的打印笔误即可:

import json
studentsList = []
print("Started Reading JSON file which contains multiple JSON document")
with open('students.txt') as f:
    for jsonObj in f:
        studentDict = json.loads(jsonObj)
        studentsList.append(studentDict)
print("Printing each JSON Decoded Object")
for student in studentsList:
    print(student)  # 这里把studentList改成student

关键提醒

  • 用copy()复制字典很重要,如果直接修改原字典再append,所有列表元素都会指向同一个对象,最后所有id都会变成10。
  • 打印时要注意变量名拼写,别把单个元素的变量写成列表名了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:27:32