比较元组列表中的相似值

时间:2016-12-04 06:28:52

标签: python list tuples

我有一个元组列表,如下例所示。我如何查看列表并找到相同的所有缩写,然后在那里添加分数。希望能够为所有缩写执行此操作。

loop = [('MD', 0.0), ('MD', 0.0), ('MD', 0.0), ('LA', 0.0625), ('LA', 0.0625), ('CA', -0.5), ('CA', -0.5), ('CA', -0.5))]

2 个答案:

答案 0 :(得分:5)

您可以使用itertools.groupby()

执行此操作
Maybe

要获得平均值,请将以上代码替换为以下代码:

>>> from itertools import groupby
>>> loop = sorted(loop, key = lambda x:x[0])
>>> {k:sum(list(e[1] for e in v)) for k, v in groupby(loop, lambda x:x[0])}
{'MD': 0.0, 'CA': -1.5, 'LA': 0.125}
>>> 

答案 1 :(得分:3)

您可以使用Counter作为另一种解决方案。这种方法解决了O(n)时间复杂度的问题。

from collections import Counter

loop = [('MD', 0.0), ('MD', 0.0), ('MD', 0.0), ('LA', 0.0625), ('LA', 0.0625), ('CA', -0.5), ('CA', -0.5), ('CA', -0.5)]
c = Counter()
for k, v in loop:
    c[k] += v

print(c)
# Counter({'LA': 0.125, 'MD': 0.0, 'CA': -1.5})
print(dict(c))
# {'LA': 0.125, 'CA': -1.5, 'MD': 0.0}