In your case (and all cases where equivalence boils down to the equivalence of some kind of key), you can simply construct a dictionary, where the keys are the values you want to compare:
L = [{'key': 'foo', 'v': 42}, {'key': 'bar', 'v': 43}, {'key': 'foo', 'v': 44}]
x = 'key'
M = {d[x]:d for d in L}.values()
# In old Python versions: dict((d[x],d for d in L)).values()
Note that the result is not deterministic, both
[{'key': 'foo', 'v': 44}, {'key': 'bar', 'v': 43}]
and
[{'key': 'foo', 'v': 42}, {'key': 'bar', 'v': 43}]
are valid results.
In the general case, simply check all accepted values:
def unique(iterable, is_eq):
tmp = []
for el in iterable:
if not any(is_eq(inTmp, el) for inTmp in tmp):
tmp.append(is_eq)
return tmp
Note that this means that your comparison function will be called O(n²) times instead of n times.