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

