我有一个需要分组的dicts列表,我需要同时进行计数和求和。 算一下这个字典在我的情况下为工人出现的次数 SUM表示基于worker的一个键的sum字段 我当时可以做一个,但不能两个。
这是我的代码
grouper = lambda x: (x["rw_worker_nick"], x["rw_date"].replace(day=1))
vacation_group = []
for key, grp in groupby(sorted(vacation, key = grouper), grouper):
temp_dict = dict(zip(["rw_worker_nick", "rw_date"], key))
temp_dict['vac_days'] = len(list(grp))
temp_dict['vac_duration'] = sum(item["rw_duration"] for item in grp)
vacation_group.append(temp_dict)
总和总是返回0
任何建议??
谢谢
答案 0 :(得分:1)
您无法迭代groupby
生成多次的迭代。 list(grp)
消耗了iterable中的所有项目。
首先存储列表,然后从中获取长度和总和:
for key, grp in groupby(sorted(vacation, key = grouper), grouper):
temp_dict = dict(zip(["rw_worker_nick", "rw_date"], key))
grp = list(grp))
temp_dict['vac_days'] = len(grp)
temp_dict['vac_duration'] = sum(item["rw_duration"] for item in grp)
vacation_group.append(temp_dict)