python - 对元组列表中的值求和并按工作日排序
问题描述
我有一个元组列表,('Day of Week', n)
如下所示:
[('Wed', 1), ('Wed', 1), ('Thu', 1), ('Thu', 0), ('Tue', 0), ('Mon', 0), ('Sun', 0), ('Sat', 0),
('Fri', 0)]
我想产生以下输出,一个元组列表('Day of Week', sum_n)
,其中是我的初始列表sum_n
中所有相应值的总和。n
请注意,元素应按工作日顺序排列。
[('Wed', 2), ('Thu', 1), ('Tue', 0), ('Mon', 0), ('Sun', 0), ('Sat', 0), ('Fri', 0)]
如何做到这一点?
解决方案
使用列表理解:
>>> l = [('Wed', 1), ('Wed', 1), ('Thu', 1), ('Thu', 0), ('Tue', 0), ('Mon', 0), ('Sun', 0), ('Sat', 0), ('Fri', 0)]
>>> [(x, sum(y[1] for y in l if y[0] == x)) for x in set(z[0] for z in l)]
[('Sun', 0),
('Tue', 0),
('Mon', 0),
('Wed', 2),
('Sat', 0),
('Thu', 1),
('Fri', 0)]
使用第二个元素降序排序:
>>> res = [(x, sum(y[1] for y in l if y[0] == x)) for x in set(z[0] for z in l)]
>>> sorted(res, key=lambda x: x[1], reverse=True)
[('Wed', 2),
('Thu', 1),
('Sun', 0),
('Tue', 0),
('Mon', 0),
('Sat', 0),
('Fri', 0)]
按星期几排序(更多答案在这里):
>>> sorted_days = ["Fri", "Sat", "Sun", "Mon", "Tue", "Wed", "Thu"]
>>> sorted(res, key=lambda x: sorted_days.index(x[0]))
[('Fri', 0),
('Sat', 0),
('Sun', 0),
('Mon', 0),
('Tue', 0),
('Wed', 2),
('Thu', 1)]
推荐阅读
- javascript - 有效网页 url 和 html 电话 url 的正则表达式
- c# - 如何在 NPOI 中访问此单元格?
- jquery - 按降序实现日期选择器年份范围
- javascript - jQuery 单击按钮并获取上面最近的 id:
- r - 如何在 R 中一次在多个不同的数据帧中找到 6 个或更多其他 0 连接的 0 的数量?
- cypress - 如何在赛普拉斯中使用具有不同端口/域名的多个应用程序
- github - 如何在 Github Action 中使用 yarn 安装私有包?
- c# - 用枚举值快速替换 int
- amazon-ec2 - 如何在 ec2-instance Linux(Apache Web 服务器)上安装 Certbot SSL?
- kubernetes - 在 Kubernetes 中调整持久卷的大小时出错