我有一个这样的(标签,计数)元组列表:
[('grape', 100), ('grape', 3), ('apple', 15), ('apple', 10), ('apple', 4), ('banana', 3)]
由此,我想对所有具有相同标签的值求和(相同的标签始终相邻),并以相同的标签顺序返回列表:
[('grape', 103), ('apple', 29), ('banana', 3)]
我知道我可以用以下方法解决它:
def group(l):
result = []
if l:
this_label = l[0][0]
this_count = 0
for label, count in l:
if label != this_label:
result.append((this_label, this_count))
this_label = label
this_count = 0
this_count += count
result.append((this_label, this_count))
return result
但是,有没有更Pythonic /优雅/有效的方法来做到这一点?
itertools.groupby
可以做你想做的:
import itertools
import operator
L = [('grape', 100), ('grape', 3), ('apple', 15), ('apple', 10),
('apple', 4), ('banana', 3)]
def accumulate(l):
it = itertools.groupby(l, operator.itemgetter(0))
for key, subiter in it:
yield key, sum(item[1] for item in subiter)
>>> print list(accumulate(L))
[('grape', 103), ('apple', 29), ('banana', 3)]
>>>
本文向大家介绍Python分组的元组列表求和,包括了Python分组的元组列表求和的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个程序,该程序将具有相同键的所有值添加到不同列表中。让我们看一个例子来清楚地理解它。 输入值 输出结果 请按照给定的步骤解决问题。 初始化列表。 使用dict将第一个列表转换为字典并将其存储在变量中。 遍历第二个列表,并将相应的值添加到字典中存在的键中
问题内容: 给出以下列表: 我想将它们按元组的第一,第二,第四和第五列进行分组,并对第三列求和。在此示例中,我将列命名为col1,col2,col3,col4,col5。 在SQL中,我将执行以下操作: 有没有一种“很酷”的方式来做到这一点,或者都是手动循环? 问题答案: (注意:重新格式化输出)
本文向大家介绍计算Python中元组列表中的元组出现,包括了计算Python中元组列表中的元组出现的使用技巧和注意事项,需要的朋友参考一下 列表由元组组成。在本文中,我们将计算列表中存在的唯一元组的数量。 使用defaultdict 我们将给定列表视为defaultdict数据容器,并使用in条件对其中的元素进行计数。 示例 输出结果 运行上面的代码给我们以下结果- 带柜台和链条 计数器和链函数是
问题内容: 定义 分解:将每个唯一对象映射为唯一整数。通常,映射到的整数范围是从零到n-1,其中n是唯一对象的数量。同样有两种变体。类型1是按标识唯一对象的顺序进行编号的位置。在类型2中,首先对唯一对象进行排序,然后应用与类型1中相同的过程。 安装程序 考虑元组列表tups 我想将其分解为 我知道有很多方法可以做到这一点。但是,我想尽可能有效地做到这一点。 我尝试过的 pandas.factori
问题内容: 这个问题已经在这里有了答案 : 9年前关闭。 我有两个清单: 我需要从这些列表中创建一个元组列表,如下所示: 我尝试这样做: 但导致: 即x中每个元素与y中每个元素的元组列表…什么是我想做的正确方法?谢谢… 编辑: 在编辑之前提到的其他两个重复是我的错,我将其缩进另一个for循环中是错误的… 问题答案: 使用内置函数: 在Python 3中: 在Python 2中:
问题内容: 我需要将列表排序为: 我已经使用了该函数,并且能够根据值进行排序…但是我无法按字母顺序进行排序,因为我需要按照数字的降序和字母的升序对列表进行排序数字具有相同的值。 问题答案: 使用元组作为浮点数为负的排序键可以反转顺序: 如果您不能进行求反(例如对字符串或字母值或非数字值),则可以利用Python sort函数稳定的事实,并分两步进行排序: