2016-02-04 8 views
-5

У меня есть кортеж элементов в парах:Matching словарь с кортежами парами в Python

words = [('Hollywood', 'actor'),('great', 'performance'),('amazing','person'),...] 

И простой словарь со значениями с плавающей точкой для каждого элемента:

sim_dict = {'Hollywood': 0.123, 'actor': 0.234, 'great': 0.012, 'performance': 1.234,...} 

То, что я хочу сделать это, я бы соответствовать «слова» с «sim_dict», чтобы получить значение каждого поплавка из каждой пары, так что это должно быть так:

words_val= [(0.123, 0.234), (0.012, 1.234),....] 

Если да, то я могу суммировать значение каждой пару:

words_val = [0.357, 1.246,...] 

Есть ли способ, чтобы получить значение каждой пару из кортежей пути сопоставления с словарем?

Это функция, я пытался до сих пор ...

def get_terms_Val(sim_dict, words): 
    i=0 
    for words[i] in words: 
     for w in words[i]: 
      if w in sim_dict: 
       print sim_dict[w] 

Но она возвращает значения для каждого элемента из списка «слов» InstEd пара.

+4

SO не является услугой написания кода, если вы хотите получить правильный ответ, вам нужно обновить свой вопрос с кодом, который вы пытались до сих пор и [Минимальный, Полный и Подтверждаемый пример] (http://stackoverflow.com/help/mcve). – Kasramvd

+0

Вы должны действительно вернуться к основам Python. Это 'для слов [i] в ​​словах является полной бессмыслицей. – Matthias

+0

слова [i] ссылаются на каждый кортеж в списке в соответствии с их номером индекса. @Matthias – htetmyet

ответ

1

Не используйте название dict для словаря или вы будете маскировать встроенный.

Если все слова в words являются ключи в словаре d решение так просто, как

value_pairs = [(d[x], d[y]) for x,y in words] 

Если есть непересекающиеся слова, используйте

value_pairs = [(d.get(x, default), d.get(y, default)) for x,y in words] 

где default некоторые значение по умолчанию в случае, если ключ не может быть найден в словаре.

map(sum, value_pairs) 

предоставит вам сумму элементов. Если вы заинтересованы только в сумме, в первую очередь, использовать:

[d[x]+d[y] for x,y in words] 
Смежные вопросы