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

Python按Key向列表追加元素异常问题排查

问题:字典中所有列表共享同一引用导致数据错误?

我有一个包含创建日期的数据集,将日期转换为月份后,生成以月份数字为键、空列表为值的字典:

{8: [], 7: []}

尝试按对应键向列表追加对应月份数据时,所有数据被添加到所有列表中,得到如下错误输出:

{8: [7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8], 7: [7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8]}

期望输出应为每个键的列表仅包含对应月份值:

{8: [8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8], 7: [7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7]}

我的代码如下:

group_keys = []
for e in data:
    group_keys.append(e.get('start_date').month)

group_keys = dict.fromkeys(set(group_keys), [])
print(group_keys)
for e in data:
    month = e.get('start_date').month
    group_keys[month].append(month)
print(group_keys)

问题原因与解决方法

错误原因

你用dict.fromkeys(set(group_keys), [])创建字典时,所有键共享同一个空列表的引用。也就是说,字典里的8: []和7: []指向的是内存中同一个列表对象,所以不管你给哪个键的列表追加数据,都会修改这个共享的列表,最终所有键的列表内容完全一致。

解决方法

替换字典的创建方式,确保每个键都对应独立的空列表。最简洁的方式是使用字典推导式:

group_keys = {month: [] for month in set(group_keys)}

修正后的完整代码:

group_keys = []
for e in data:
    group_keys.append(e.get('start_date').month)

# 用字典推导式创建每个键对应独立空列表的字典
group_keys = {month: [] for month in set(group_keys)}
print(group_keys)
for e in data:
    month = e.get('start_date').month
    group_keys[month].append(month)
print(group_keys)

这样每个键的列表都是独立的对象,追加数据时只会修改对应键的列表,就能得到你期望的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:01:55