Эдакое first or none для +/- сложного поиска в дикте.

Есть код вида:

mydict_new = dict()
for key, val in mydict.items():
    flag = False
    for a in gen1():
        if cond:
            mydict_new[key] = func2(val, a)
            flag = True
    if not flag:
        mydict_new[key] = func2(val)
return mydict_new

Хочу что-то среднее между any и next чтобы не ходить далеко по итератору, но и ошибки не обрабатывать исключениями. Эдакий first().

[in  1] first(i for i in range(10) if i > 5)
[out 1] 6
[in  2] first(i for i in range(10) if i > 15)
[out 1] None

Так бы код можно было отрефакторить до:

mydict_new = dict()
for key, val in mydict.items():
    mydict_new[func] = first(func2(val, a) for a in gen1() if cond) or func2(val)
return mydict_new