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

如何用Python对字典中列表元素执行两种数值转换操作?

实现两种数组操作的Python方案

我来帮你搞定这两个需求!基于你已经处理好的字典d,我们可以用简洁的字典推导式或者循环来快速实现,完全匹配你的预期输出。

首先先回顾你已经完成的代码(用来生成字典d):

import pandas as pd

dfs = pd.read_excel('ff1.xlsx', sheet_name=None)
dfs1 = {i:x.groupby(pd.to_datetime(x['date']).dt.strftime('%Y-%m-%d'))['duration'].sum() for i, x in dfs.items()}
d = pd.concat(dfs1).groupby(level=1).apply(list).to_dict()

1. 每个值除以80后取整

这里用Python的整数除法//就能直接实现向下取整,正好符合你的预期(比如197//80=2,250//80=3)。用字典推导式一行搞定:

# 操作1:每个元素除以80后取整
result_div80 = {date: [num // 80 for num in lst] for date, lst in d.items()}

print("除以80后的结果:")
print(result_div80)

运行后输出就是你要的:

{'2017-05-06': [2, 3], '2017-05-07': [2, 1], '2017-05-08': [2, 2], '2017-05-09': [2, 2], '2017-06-09': [0]}

2. 总和减去每个元素(基于操作1的结果)

看你的预期输出,这个操作应该是先完成操作1的取整,再对处理后的列表计算总和,最后用总和减去每个元素。我们可以分两步实现,也可以直接在循环里完成:

# 操作2:先取整,再计算总和减每个元素
result_sum_minus = {}
for date, lst in d.items():
    # 先执行操作1的取整
    processed_list = [num // 80 for num in lst]
    # 计算处理后列表的总和
    total = sum(processed_list)
    # 生成总和减每个元素的新列表
    result_sum_minus[date] = [total - num for num in processed_list]

print("\n总和减各元素的结果:")
print(result_sum_minus)

运行后输出完全匹配你的预期:

{'2017-05-06': [3, 2], '2017-05-07': [1, 2], '2017-05-08': [2, 2], '2017-05-09': [2, 2], '2017-06-09': [0]}

如果你的需求是直接对原始列表做总和减元素(而不是取整后的),只需要把上面的processed_list换成原始的lst即可,代码如下:

# 针对原始列表的总和减元素
result_sum_minus_raw = {date: [sum(lst) - num for num in lst] for date, lst in d.items()}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:53:26