首页 > 解决方案 > 对元组列表中的值求和并按工作日排序

问题描述

我有一个元组列表,('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)]

如何做到这一点?

标签: pythonpython-3.xlistsumtuples

解决方案


使用列表理解:

>>> 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)]

推荐阅读