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

Python数组元素聚合:字典值数组的总和减原元素转换实现

针对你需要的字典转换需求,这里有两种适配你所用Python 3.6.2和pandas 0.22.0版本的实现方案:

方法一:纯Python原生实现

这种方法不需要依赖第三方库,直接用Python内置功能就能完成,逻辑清晰易懂:

original_dict = {'2017-05-06': [3, 7, 8],'2017-05-07': [3, 9, 10],'2017-05-08': [4]}
target_dict = {}

for date, num_list in original_dict.items():
    total = sum(num_list)
    # 只有当列表元素数量大于1时才执行转换,单元素列表保持原样
    if len(num_list) > 1:
        target_dict[date] = [total - num for num in num_list]
    else:
        # 使用copy()避免后续意外修改原列表(可选,若原列表不会被复用也可直接赋值)
        target_dict[date] = num_list.copy()

print(target_dict)

执行这段代码后,就能得到你想要的目标字典。核心逻辑是遍历原字典的每个键值对,先计算对应列表的总和,再根据列表长度决定是否生成新的转换后列表。

方法二:利用pandas实现

如果你更习惯用pandas处理数据,也可以借助Series的apply方法来完成转换:

import pandas as pd

original_dict = {'2017-05-06': [3, 7, 8],'2017-05-07': [3, 9, 10],'2017-05-08': [4]}
# 将原字典转换为pandas Series
data_series = pd.Series(original_dict)

# 定义转换函数
def transform_num_list(lst):
    total = sum(lst)
    return [total - x for x in lst] if len(lst) > 1 else lst

# 对Series中的每个列表应用转换函数
transformed_series = data_series.apply(transform_num_list)
# 再转回字典格式
target_dict = transformed_series.to_dict()

print(target_dict)

这个方案的优势是当你的字典规模较大时,pandas的apply方法能更高效地批量处理数据,同时保持代码的简洁性。

内容的提问来源于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 07:38:03