Входной словарь должен быть исправлен заранее (или программой, которая производит его в восходящем направлении), чтобы придать больше смысла этому ответу. Простое понимание с помощью split
сделает:
dict1 = {'Protein 1' : '001, 002, 003', 'Protein 2' : '003, 004', 'Protein 3' : '002'}
dict1 = {k : v.split(", ") for k,v in dict1.items()}
теперь у нас есть список строк в качестве значений, что имеет больше смысла.
>>> dict1
{'Protein 1': ['001', '002', '003'],
'Protein 2': ['003', '004'],
'Protein 3': ['002']}
После этого просто перестройте словарь, используя словарь перевода со значением по умолчанию к исходному значению, чтобы избежать ключевых ошибок:
# Matches proteins to corresponding drug ids #
dict1 = {'Protein 1' : ['001', '002', '003'], 'Protein 2' : ['003', '004'], 'Protein 3' : ['002']}
# Matches drug ids with drug names #
dict2 = {'001' : 'Drug1', '002' : 'Drug2', '003' : 'Drug3', '004' : 'Drug4'}
dict3 = {k : [dict2.get(x,x) for x in v] for k,v in dict1.items()}
результат:
>>> dict3
{'Protein 1': ['Drug1', 'Drug2', 'Drug3'],
'Protein 2': ['Drug3', 'Drug4'],
'Protein 3': ['Drug2']}