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

如何使generic_curves_dict各键对应generic_CT_curves_month的对应日期?

问题解决:字典所有键对应同个日期值的修复

问题现象

尝试给generic_curves_dict的每个键(如A1、B2)添加month字段,使其对应generic_CT_curves_month列表中对应索引的日期,但运行后所有键的month值都变成了列表最后一个日期,无法实现A1对应第一个日期、B2对应第二个日期的预期效果。

错误代码:

import numpy as np

generic_list = ['A1', 'B2', 'C3', 'D4', 'E5', 'F6']
empty_dict = [{}]
generic_CT_curves_month = [np.datetime64('2022-12-01T00:00:00.000000000'),
                          np.datetime64('2023-03-01T00:00:00.000000000'),
                          np.datetime64('2023-05-01T00:00:00.000000000'),
                          np.datetime64('2023-07-01T00:00:00.000000000'),
                          np.datetime64('2023-10-01T00:00:00.000000000'),
                          np.datetime64('2023-12-01T00:00:00.000000000')]
generic_curves_dict = dict(zip(generic_list, empty_dict * 6))
print(generic_curves_dict)
for ticker in generic_curves_dict:
    generic_curves_dict[str(ticker)]['month'] = generic_CT_curves_month[int(ticker[-1])-1]
    
generic_curves_dict

错误输出:

{'A1': {'month': numpy.datetime64('2023-12-01T00:00:00.000000000')},
 'B2': {'month': numpy.datetime64('2023-12-01T00:00:00.000000000')},
 'C3': {'month': numpy.datetime64('2023-12-01T00:00:00.000000000')},
 'D4': {'month': numpy.datetime64('2023-12-01T00:00:00.000000000')},
 'E5': {'month': numpy.datetime64('2023-12-01T00:00:00.000000000')},
 'F6': {'month': numpy.datetime64('2023-12-01T00:00:00.000000000')}}

错误原因

问题出在empty_dict * 6这行:empty_dict是包含单个空字典的列表,当用*6复制时,列表里的6个元素都是同一个字典对象的引用。也就是说,generic_curves_dict里所有键指向的都是同一个字典,循环中每次修改'month'字段,都是在修改这个共享的字典,最后一次修改的值会覆盖之前所有操作,导致所有键的month都是最后一个日期。

修复方案

方案1:创建独立的空字典

把empty_dict *6替换成列表推导式[{} for _ in range(6)],这样每个元素都是全新的空字典,互相独立。

修复后代码:

import numpy as np

generic_list = ['A1', 'B2', 'C3', 'D4', 'E5', 'F6']
generic_CT_curves_month = [np.datetime64('2022-12-01T00:00:00.000000000'),
                          np.datetime64('2023-03-01T00:00:00.000000000'),
                          np.datetime64('2023-05-01T00:00:00.000000000'),
                          np.datetime64('2023-07-01T00:00:00.000000000'),
                          np.datetime64('2023-10-01T00:00:00.000000000'),
                          np.datetime64('2023-12-01T00:00:00.000000000')]
# 用列表推导式生成6个独立的空字典
generic_curves_dict = dict(zip(generic_list, [{} for _ in range(6)]))

for ticker in generic_curves_dict:
    generic_curves_dict[ticker]['month'] = generic_CT_curves_month[int(ticker[-1])-1]
    
print(generic_curves_dict)

方案2:构建字典时直接关联日期(更高效)

不需要先创建空字典再循环赋值,直接在构建字典的时候就把对应的month字段加上,一步到位:

import numpy as np

generic_list = ['A1', 'B2', 'C3', 'D4', 'E5', 'F6']
generic_CT_curves_month = [np.datetime64('2022-12-01T00:00:00.000000000'),
                          np.datetime64('2023-03-01T00:00:00.000000000'),
                          np.datetime64('2023-05-01T00:00:00.000000000'),
                          np.datetime64('2023-07-01T00:00:00.000000000'),
                          np.datetime64('2023-10-01T00:00:00.000000000'),
                          np.datetime64('2023-12-01T00:00:00.000000000')]

# 直接通过zip配对键和日期,生成带month字段的字典
generic_curves_dict = {
    ticker: {'month': date} 
    for ticker, date in zip(generic_list, generic_CT_curves_month)
}

print(generic_curves_dict)

正确输出

{'A1': {'month': numpy.datetime64('2022-12-01T00:00:00.000000000')},
 'B2': {'month': numpy.datetime64('2023-03-01T00:00:00.000000000')},
 'C3': {'month': numpy.datetime64('2023-05-01T00:00:00.000000000')},
 'D4': {'month': numpy.datetime64('2023-07-01T00:00:00.000000000')},
 'E5': {'month': numpy.datetime64('2023-10-01T00:00:00.000000000')},
 'F6': {'month': numpy.datetime64('2023-12-01T00:00:00.000000000')}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:45:41