I have a list of tuples named data:
data = [(\'A\', 2),
(\'B\', 2), (\'B\', 4), (\'B\', 6), (\'B\', 8), (\'B\', 6), (\'B\', 4), (\'B\',
An alternative solution which you might consider, especially when dealing with large data sets, is to use pandas. Here, groupby and mean will do the job:
import pandas as pd
data = [('A', 2),
('B', 2), ('B', 4), ('B', 6), ('B', 8), ('B', 6), ('B', 4), ('B', 3),
('C', 10), ('C', 10), ('C', 10),
('D', 12),
('E', 12),
('F', 10), ('F', 8), ('F', 6)]
df = pd.DataFrame(data, columns=['letter', 'number'])
print(df)
# letter number
# 0 A 2
# 1 B 2
# 2 B 4
# 3 B 6
# 4 B 8
# 5 B 6
# 6 B 4
# 7 B 3
# 8 C 10
# 9 C 10
# 10 C 10
# 11 D 12
# 12 E 12
# 13 F 10
# 14 F 8
# 15 F 6
print(df.groupby('letter').mean())
# number
# letter
# A 2.000000
# B 4.714286
# C 10.000000
# D 12.000000
# E 12.000000
# F 8.000000
print(df.groupby('letter').mean().round().astype(int))
# number
# letter
# A 2
# B 5
# C 10
# D 12
# E 12
# F 8
You can get back your list of tuples as follows:
averages = df.groupby('letter').mean().round().astype(int)
result = list(result.to_records())
print(result)
# [('A', 2), ('B', 5), ('C', 10), ('D', 12), ('E', 12), ('F', 8)]