使用Python计算元组的出现次数

sok*_*efe 2 python tuples python-2.7

我正在尝试将显示产品和成本的Python元组列表转换为以给定成本显示成本和产品数量的元组列表.

例如,给出以下输入:

[('Product1', 9), ('Product2', 1),
 ('Product3', 1), ('Product4', 2),
 ('Product5', 3), ('Product6', 4),
 ('Product7', 5), ('Product8', 6), 
 ('Product9', 7), ('Product10', 8), 
 ('Product11', 3), ('Product12', 1), 
 ('Product13', 2), ('Product14', 3), 
 ('Product15', 4), ('Product16', 5), 
 ('Product17', 6), ('Product18', 7)]
Run Code Online (Sandbox Code Playgroud)

我正在尝试在Python中创建一个能够呈现下面的函数.即,对于三种不同的产品,值1呈现3次,因此(1,3).

[(1, 3), (2, 1), (3, 2), (4, 1), (5, 2), (6, 2), (7, 2), (8, 1) (9, 1)]
Run Code Online (Sandbox Code Playgroud)

JRo*_*ite 8

也许collections.Counter可以解决你的问题:

>>> from collections import Counter
>>> c = Counter(elem[1] for elem in given_list)
Run Code Online (Sandbox Code Playgroud)

输出将如下所示:

Counter({1: 3, 3: 3, 2: 2, 4: 2, 5: 2, 6: 2, 7: 2, 8: 1, 9: 1})
Run Code Online (Sandbox Code Playgroud)

如果您希望它在您在问题中指定的列表中,那么您可以这样做:

>>> list(c.iteritems())
[(1, 3), (2, 2), (3, 3), (4, 2), (5, 2), (6, 2), (7, 2), (8, 1), (9, 1)]
Run Code Online (Sandbox Code Playgroud)

  • 简单.简单.高效.好的回答! (2认同)
  • 为什么使用list comp而不是`list(c.iteritems())`?顺便说一句,你不应该使用`list`作为变量名,因为它会影响内置的`list`类型,这会导致神秘的错误. (2认同)