在与Python 2.7中的元组中的单词匹配的列表中汇总成员元素的值

Hte*_*tet 2 python tuples list

我想总结列表中的每个元素,通过匹配列表中的单词可以实现哪些值.包含每个单词的值和列表的元组的短语如下:

val_tuple = [('and',3),('cat',2),('dog',3),('only',5),('horse',3),('car',3),...]

word_list = ['cat and dog',
             'only horse',
             'dog and horse',
             'only dog',...]
Run Code Online (Sandbox Code Playgroud)

输出应该是这样的:

result = [('cat and dog', 8),
          ('only horse', 8),
          ('dog and horse', 9),
          ('only dog', 8),...]
Run Code Online (Sandbox Code Playgroud)

我无法找到方法并坚持几次尝试只是为了总结列表中的值:

for w in word_list:
   for val in val_tuple:
       if val[0] in w:
           sum = val[0]
       sum += sum 
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 7

首先,您最好为您的单词值构建一个字典:

word_values = dict(val_tuple)
Run Code Online (Sandbox Code Playgroud)

您可以简单地使用列表理解:

result = [(sentence,sum(word_values.get(word,0) for word in sentence.split()))
              for sentence in word_list]
Run Code Online (Sandbox Code Playgroud)

粗体部分将得分加起来.所以我们为每一个人所做的sentence就是我们.split()用来获得这些词语.现在对于这些词我们可以得到word_values.get(word,0):这意味着我们进行查找,并且如果该元素没有找到,我们假设字值0.我们sum(..)对所有这些值,并返回一个元组(sentence,sum(..))的每一个句子.

根据提供的样本数据,我获得:

>>> result
[('cat and dog', 8), ('only horse', 8), ('dog and horse', 9), ('only dog', 8)]
Run Code Online (Sandbox Code Playgroud)