Проблема в том, что иногда ваши значения представляют собой списки, которые должны быть повторены, а иногда ваши значения представляют собой строки, которые должны храниться вместе, но при этом итерируемые.
Обратите внимание на следующее:
def pairs_from_dict(d):
for k, v in d.items():
if isinstance(v, str):
yield (v, k)
else:
yield from ((k_i, k) for k_i in v)
Приведенный выше генератор предполагает, что значения dict являются либо строками, либо должны повторяться, но вы можете добавить дополнительные проверки к своему сердцу.
Предполагается также, что все значения, из которых вы хотите создать ключи, являются уникальными, например, нет {'cherry': 'grape', 'banana':'grape'}
в исходном словаре, потому что ключи словаря должны быть уникальными.
Работает так:
>>> d = {'orange':['apple','peach'], 'cherry':'grape'}
>>> dict(pairs_from_dict(d))
{'apple': 'orange', 'grape': 'cherry', 'peach': 'orange'}