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

Python中如何正确向列表添加多个不同字典?

问题解答

你的猜测完全正确

在Python中,字典属于可变对象,当你执行mylist.append(mydict)时,并没有把字典的内容复制一份添加到列表里,而是把字典对象的引用(内存地址)添加到了列表中。也就是说,列表里的两个元素指向的是同一个内存中的字典对象。后续修改mydict的内容时,列表里的元素自然会同步变化——因为它们本质上是同一个东西。

正确添加不同字典的方法

方法1:每次创建全新字典

在每次需要添加新字典到列表前,重新初始化一个空字典,这样每次添加的都是独立的字典对象:

mylist = []

# 第一次构建字典
mydict = {}
mydict["s"] = 1
mydict["p"] = "hasprice"
mydict["o"] = 3
mylist.append(mydict)

# 第二次构建字典,重新创建空字典
mydict = {}
mydict["s"] = 22
mydict["p"] = "hasvat"
mydict["o"] = 66
mylist.append(mydict)

print(mylist)

输出结果:

[{'s': 1, 'p': 'hasprice', 'o': 3}, {'s': 22, 'p': 'hasvat', 'o': 66}]

方法2:添加时复制现有字典(浅拷贝)

如果需要基于已有字典修改后添加,可以用字典的copy()方法(或dict()构造函数)创建副本,这样添加到列表的是新的字典对象:

mydict = {}
mylist = []

mydict["s"] = 1
mydict["p"] = "hasprice"
mydict["o"] = 3
mylist.append(mydict.copy())  # 添加字典副本

mydict["s"] = 22
mydict["p"] = "hasvat"
mydict["o"] = 66
mylist.append(mydict.copy())  # 添加新的副本

print(mylist)

同样能得到包含不同字典的列表。

循环场景下的写法

如果是在循环中批量构建字典,推荐在每次循环内创建新字典,示例如下:

mylist = []
# 假设待处理的参数集合
data_items = [
    (1, "hasprice", 3),
    (22, "hasvat", 66)
]

for s_val, p_val, o_val in data_items:
    new_dict = {}
    new_dict["s"] = s_val
    new_dict["p"] = p_val
    new_dict["o"] = o_val
    mylist.append(new_dict)

# 写入JSON文件
import json
with open("output.json", "w") as f:
    json.dump(mylist, f, indent=4)

循环内的new_dict每次都是独立对象,添加到列表后不会互相影响,最终写入JSON文件的内容也符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:25:38