根据元组的值对元组列表中的重复元组进行平均

Averaging the duplicate tuples from list of tuples based on their values

我有一个元组列表如下:

lst:
    [(1, 1, 18), (1, 1, 19), (1, 2, 7), (1, 2, 8), (1, 3, 31), (1, 4, 11), (1, 4, 15),(1, 5, 3)]

我想得到前两项相似的元组的平均值。所以从上面的例子来看,我想要的输出是:

out_lst:
    [(1, 1, 18.5), (1, 2, 7.5), (1, 3, 31), (1, 4, 13), (1,5,3)]

您可以尝试这样的方法,虽然效率不高,但可以解决问题

input_list = [(1, 1, 18), (1, 1, 19), (1, 2, 7), (1, 2, 8), (1, 3, 31), (1, 4, 11), (1, 4, 15),(1, 5, 3)]

compute_dic = {}
for elem in input_list:
    compute_dic.setdefault((elem[0], elem[1]), []).append(elem[2])

out = [(k[0], k[1], sum(v)/len(v)) for k,v in compute_dic.items()]

print(out)

您可以使用 itertools.groupby 和 statistics.mean

import itertools
import statistics
keyfunc = lambda kk: (kk[0],kk[1])
by_two = itertools.groupby( sorted( lst, key= keyfunc ) , key= keyfunc )
our_lst = [ ( kk[0], kk[1], statistics.mean( map(lambda tp: tp[2], vv) ) ) for kk,vv in by_two ]

print(our_lst)
# print [(1, 1, 18.5), (1, 2, 7.5), (1, 3, 31), (1, 4, 13), (1, 5, 3)]