如何修改字典中datetime类型键的小时为12且不改动其他部分
修改字典中datetime键的小时部分
核心思路
datetime对象是不可变类型,无法直接修改已有对象的属性,因此需要为每个键创建一个新的datetime对象(将小时替换为12),再把原键对应的值映射到新键上,最终生成新字典或覆盖原字典。
方法1:字典推导式(简洁高效)
直接通过推导式遍历原字典的键值对,用datetime.replace(hour=12)生成新键:
import datetime # 原字典 original_dict = { datetime.datetime(2022, 6, 1, 0, 0): 42.3425, datetime.datetime(2022, 7, 1, 0, 0): 24.251666666666665, datetime.datetime(2022, 8, 1, 0, 0): 27.058333333333334, datetime.datetime(2022, 9, 1, 0, 0): 6.960000000000001, datetime.datetime(2022, 10, 1, 0, 0): 0.0, datetime.datetime(2022, 6, 2, 0, 0): 15.950833333333334, datetime.datetime(2022, 7, 2, 0, 0): 33.69916666666667, datetime.datetime(2022, 8, 2, 0, 0): 12.700000000000001, datetime.datetime(2022, 9, 2, 0, 0): 5.406666666666666, datetime.datetime(2022, 10, 2, 0, 0): 0.035833333333333335, datetime.datetime(2022, 6, 3, 0, 0): 14.744166666666667, datetime.datetime(2022, 7, 3, 0, 0): 30.455833333333334, datetime.datetime(2022, 8, 3, 0, 0): 14.745, datetime.datetime(2022, 9, 3, 0, 0): 8.981666666666667, datetime.datetime(2022, 10, 3, 0, 0): 0.035, datetime.datetime(2022, 6, 4, 0, 0): 42.14000000000001, datetime.datetime(2022, 7, 4, 0, 0): 18.213333333333335, datetime.datetime(2022, 8, 4, 0, 0): 11.723333333333336, datetime.datetime(2022, 9, 4, 0, 0): 6.530833333333334, datetime.datetime(2022, 10, 4, 0, 0): 0.4883333333333333, datetime.datetime(2022, 6, 5, 0, 0): 55.175000000000004, datetime.datetime(2022, 7, 5, 0, 0): 43.63749999999999, datetime.datetime(2022, 8, 5, 0, 0): 22.379999999999995, datetime.datetime(2022, 9, 5, 0, 0): 2.7191666666666667, datetime.datetime(2022, 6, 6, 0, 0): 20.865, datetime.datetime(2022, 7, 6, 0, 0): 35.29416666666666 } # 生成修改后的新字典 modified_dict = {dt_key.replace(hour=12): value for dt_key, value in original_dict.items()}
方法2:循环遍历(直观易懂)
如果需要更清晰的步骤展示,可以用循环逐个处理:
import datetime original_dict = { datetime.datetime(2022, 6, 1, 0, 0): 42.3425, datetime.datetime(2022, 7, 1, 0, 0): 24.251666666666665, # 其余键值对同上,此处省略 } modified_dict = {} for dt_key, value in original_dict.items(): # 创建新的datetime对象,仅修改小时为12 new_dt_key = dt_key.replace(hour=12) modified_dict[new_dt_key] = value
关键说明
datetime.replace()方法会返回一个新的datetime对象,原对象不会被修改,完美适配字典键不可变的特性。- 两种方法最终都会得到所有键的小时为12、其他属性(年、月、日、分)保持不变的新字典。
内容的提问来源于stack exchange,提问作者rail
相关产品推荐
相关产品推荐

