Python 比较元组列表中的相似值

Python 比较元组列表中的相似值,python,list,tuples,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))] 你可以用它来做 要获得平均值,请将上述代码替换为以下代码: >>> result = dict() >&

我有一个元组列表,如下例所示。我怎样才能浏览列表,找到所有相同的缩写词,然后把分数加起来呢。希望能够为所有缩写词做到这一点

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))]
你可以用它来做


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

>>> result = dict()
>>> for k, v in groupby(loop, lambda x:x[0]):
...     temp = list(v)
...     result[k] = sum(i[1] for i in temp)/len(temp)
... 
>>> result
{'MD': 0.0, 'LA': 0.0625, 'CA': -0.5}
>>> 

您可以使用
计数器
作为另一种解决方案。该方法解决了时间复杂度为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}

有没有办法将您创建的总和除以有多少个条目。尝试获取平均值。您可以使用另一个计数器捕获每个项目的出现次数。就像简单的
c2[k]+=1
。我假设速度不是问题,尽管这里的日志(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}