python - 对元组列表中的值求和并按工作日排序

标签 python python-3.x list sum tuples

这个问题在这里已经有了答案:





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/

相关文章:

python - 我的服务器(Python套接字)有什么问题?

python - namedtuple 和 NamedTuple 有什么区别?

python - pandas 人类索引排序

python - 如何将两列 Pandas 数据框的元素绘制为直方图?

java - 使用 Stream API 复制列表元素 N 次

java - 从一堆 map 创建特定值列表的有效方法

python - Django:BASE_DIR 和 PROJECT_ROOT 之间的区别?

Python:如何通过下一个项目值链接列表中的元组

python - 如何在 Python3 中找到 os.scandir 的源代码?

python - 使用 lambda 通过更改/修改旧列表来创建新列表