您可以使用itertools.groupby
:
In [19]: list1 = [('a', 6.5),('a', 6.5),('a', -6.5),('b', 0.0),('b', 0.0),('b',6.5),('b', -6.5),('b',6.5)]
In [20]: from itertools import groupby
In [21]: from operator import itemgetter
In [22]: lis=[]
In [23]: for k,v in groupby(list1,key=itemgetter(0)):
items=[x[1] for x in v]
lis.append((k, sum(items)/len(items), len(items)))
....:
In [24]: lis
Out[24]: [('a', 2.1666666666666665, 3), ('b', 1.3, 5)]
注意,以防list
沒有排序你已經先解決它使用itertools.groupby
來得到想要的結果。
使用collections.defaultdict
,這會爲未排序的項目工作,以及:
In [25]: from collections import defaultdict
In [26]: dic=defaultdict(list)
In [27]: for k,v in list1:
....: dic[k].append(v)
....:
In [28]: dic
Out[28]: defaultdict(<type 'list'>, {'a': [6.5, 6.5, -6.5], 'b': [0.0, 0.0, 6.5, -6.5, 6.5]})
In [29]: [(k,sum(v)/len(v),len(v)) for k,v in dic.items()]
Out[29]: [('a', 2.1666666666666665, 3), ('b', 1.3, 5)]
您的要求輸出[(a,6.5/3,3)(b,6.5/4,4)]或[(a,6.5/3,3),(b,6.5/4,4)]? – Johnny 2013-04-21 19:36:01