2017-02-17 30 views
2

Допустим, вы работаете с этими двумя словарях:Python: как сопоставить ключи словаря со значениями другого?

a={(1,2):1.8,(2,3):2.5,(3,4):3.9} #format -> {(x,y):value} 
b={10:(1,2),20:(2,3),30:(3,4)} #format -> {id:(x,y)} 

, и вы хотите, чтобы придумать словарь, который имеет следующий формат: {id:value}. В этом примере, результат будет:

c={10:1.8,20:2.5,30:3.9} 

Я попытался следующий

c={k:j for k in b.keys() and j in a.values()} 

но результат является, по-видимому тривиальный

NameError: name 'j' is not defined 

Какой самый лучший способ сделать это? Как вы «моделируете» переписку?

ответ

2

Итерации свыше b только кажется достаточным - почему бы просто не использовать естественное соответствие dict.

>>> {k: a[v] for k, v in b.items()} 
{10: 1.8, 20: 2.5, 30: 3.9} 

Правильная синтаксический попытка вашей идеи будет что-то вроде

>>> {k:j for k, j in zip(b.keys(),a.values())} 
{10: 1.8, 20: 3.9, 30: 2.5} 

Однако, как вы можете видеть, это не работает в любом случае. Это потому, что dicts, конечно, неупорядочен, и поэтому между ключами одного dict и значениями другого не существует принудительной связи.