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

如何利用Possibility值将元组转换为指定结构的事件列表

解决Python事件日期重复与递增日期生成问题

问题背景

现有元组形式的原始数据:

import ast

data = (("Jeff Celebration",
  "{\"2010-09-02\": {\"Possibility\": 3, \"Confidence\":93}, \"2011-09-01\": {\"Possibility\": 3, \"Confidence\":86}}")
, ("Queens Bday",
  "{\"2010-02-18\": {\"Possibility\": 2, \"Confidence\":88}, \"2011-02-17\": {\"Possibility\": 2, \"Confidence\":88}}"))

已完成数据解析代码,将原始数据转换为事件名对应日期与Possibility的字典:

data = {i[0]: {key:val.get('Possibility') for key, val in ast.literal_eval(i[1]).items()} for i in data}

需要实现的需求:

  • 针对每个日期对应的Possibility值,重复对应事件名并添加数字下标(如Possibility为3则生成事件名_1、事件名_2、事件名_3)
  • 同时生成从该日期开始的连续递增日期(如起始日期为2010-09-02,生成3个日期则是2010-09-02、2010-09-03、2010-09-04)
  • 最终整理为包含event和keys两个列表的字典,格式如下:
data = {'event': ['Jeff Celebration_1', 'Jeff Celebration_2', 'Jeff Celebration_3', 'Jeff Celebration_1', 'Jeff Celebration_2', 'Jeff Celebration_3', 'Queens Bday_1', 'Queens Bday_2', 'Queens Bday_1', 'Queens Bday_2'], 
        'keys': ['2010-09-02', '2010-09-03', '2010-09-04', '2011-09-01', '2011-09-02', '2011-09-03', '2010-02-18', '2010-02-19', '2011-02-17', '2011-02-18']}

解决方案代码

需要引入datetime模块处理日期递增,具体实现如下:

import ast
from datetime import datetime, timedelta

# 原始数据
data = (("Jeff Celebration",
  "{\"2010-09-02\": {\"Possibility\": 3, \"Confidence\":93}, \"2011-09-01\": {\"Possibility\": 3, \"Confidence\":86}}")
, ("Queens Bday",
  "{\"2010-02-18\": {\"Possibility\": 2, \"Confidence\":88}, \"2011-02-17\": {\"Possibility\": 2, \"Confidence\":88}}"))

# 解析数据为事件-日期-Possibility字典
parsed_data = {i[0]: {key:val.get('Possibility') for key, val in ast.literal_eval(i[1]).items()} for i in data}

event_list = []
keys_list = []

# 遍历每个事件及其日期信息
for event_name, date_info in parsed_data.items():
    for date_str, count in date_info.items():
        # 转换日期字符串为datetime对象
        base_date = datetime.strptime(date_str, "%Y-%m-%d")
        # 根据Possibility次数生成对应的事件名和日期
        for idx in range(1, count+1):
            # 生成带下标事件名
            event_list.append(f"{event_name}_{idx}")
            # 生成递增日期并转为字符串
            current_date = base_date + timedelta(days=idx-1)
            keys_list.append(current_date.strftime("%Y-%m-%d"))

# 组装最终结果
final_data = {'event': event_list, 'keys': keys_list}
print(final_data)

代码说明

  1. 数据解析:用ast.literal_eval将原始数据中的JSON字符串转换为Python字典,得到事件名对应各日期的Possibility值。
  2. 列表初始化:创建event_list和keys_list两个空列表,分别存储生成的带序号事件名和递增日期。
  3. 日期与事件生成:
    • 将日期字符串转为datetime对象,方便后续日期递增计算。
    • 根据Possibility的次数循环,生成从1到count的序号,拼接成带后缀的事件名。
    • 用timedelta(days=idx-1)计算递增日期(第一次循环为原日期,后续依次加1天),再转回字符串格式存入日期列表。
  4. 结果组装:将两个列表打包为要求的字典格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:20:31