あなたはこのようなことを試すことができます:
mean_a = np.sum(np.array([d['a'] for d in data]) * np.array([d['n'] for d in data])) / len(data)
編集:実際には、@mgilsonからの上記の方法はより高速です:
import numpy as np
from operator import itemgetter
from pandas import *
data=[]
for i in range(100000):
    data.append({'a':np.random.random(), 'n':np.random.random(), 'o':np.random.random(), 'u':np.random.random()})
def func1(data):
    x = n = o = u = 0
    items = itemgetter('a','n','o','u')
    for entry in data:
        A,N,O,U = items(entry)
        x += A*N  # n - number of data points
        n += N
        o += O    #don't know what you're doing with O or U, but I'll leave them
        u += U
    average = int(round(x / n)), n, o, u
    return average
def func2(data):
    mean_a = np.sum(np.array([d['a'] for d in data]) * np.array([d['n'] for d in data])/len(data)
    return (mean_a, 
                np.sum([d['n'] for d in data]), 
                np.sum([d['o'] for d in data]), 
                np.sum([d['u'] for d in data])
               )
def func3(data):
    dframe = DataFrame(data)
    return np.sum((dframe["a"]*dframe["n"])) / dframe.shape[0], np.sum(dframe["n"]), np.sum(dframe["o"]), np.sum(dframe["u"])
In [3]: %timeit func1(data)
10 loops, best of 3: 59.6 ms per loop
In [4]: %timeit func2(data)
10 loops, best of 3: 138 ms per loop
In [5]: %timeit func3(data)
10 loops, best of 3: 129 ms per loop
データに対して他の操作を行っている場合は、Pandasパッケージの使用を検討します。DataFrameオブジェクトは、使用している辞書のリストとよく一致します。オーバーヘッドの大部分は、データをnumpy配列またはDataFrameオブジェクトに取り込むIO操作だと思います。