Что не так в этом фрагменте - это итерация по names.values()
во внутренней l oop.
>>> let=['a','b','c']
>>> dig=[1,2,3]
>>> nms=dict((key, dig) for key in let)
>>> nms
{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}
>>> nms.values()
dict_values([[1, 2, 3], [1, 2, 3], [1, 2, 3]])
Вы должны переписать его как
def fn():
for k in nms.keys():
for d in nms[k]:
yield(''.join('{}{}'.format(k,d)))
list(fn())
# ['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3']