这个问题在这里已经有了答案:
Sum numbers by letter in list of tuples
(8 个回答)
1年前关闭。
我有一个包含 ('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)]
按星期几排序 ( more answers here ):
>>> 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)]
关于python - 对元组列表中的值求和并按工作日排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59304143/