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
相关产品推荐
相关产品推荐

