bmesh.ops.extrude_discrete_faces takes a list of faces and extrudes them, leaving them in the original place with new joining geometry. If we take the
['faces'] part of the data returned by
extrude_discrete_faces we have a list of faces that have been extruded, these are the 'original' faces only, not the extra joining faces.
For each of these extruded faces we take the face normal and multiply it by the distance you wish to move the face and use that in
bmesh.ops.translate to position them where you want.
# sample set for cube
extrude_values = [0.1,0.2,0.3,0.4,0.5,0.6]
obj = bpy.context.active_object
bm = bmesh.new()
extrude_faces = bmesh.ops.extrude_discrete_faces(bm, faces=bm.faces)['faces']
for f_idx in range(len(extrude_faces)):
dr = extrude_faces[f_idx].normal * extrude_values[f_idx]
bmesh.ops.translate(bm, verts=extrude_faces[f_idx].verts, vec=dr)