如何从列表列表中出现的单词列表中返回单词的计数?

时间:2015-03-26 19:58:11

标签: python list python-2.7 data-structures

我有一个非常大的字符串列表,如下所示:

list_strings = ['storm', 'squall', 'overcloud',...,'cloud_up', 'cloud_over', 'plague', 'blight', 'fog_up', 'haze']

和一个非常大的列表列表如下:

lis_of_lis = [['the storm was good blight'],['this is overcloud'],...,[there was a plague stormicide]]

如何在list_strings的每个子列表中返回lis_of_lis中显示的所有字词的计数列表。例如,对于上面的示例,这将是所需的输出:[2,1,1]

例如:

['storm', 'squall', 'overcloud',...,'cloud_up', 'cloud_over', 'plague', 'blight', 'fog_up', 'haze']

['the storm was good blight']

计数为2,因为stormblight出现在第一个子列表中(lis_of_lis)

['storm', 'squall', 'overcloud',...,'cloud_up', 'cloud_over', 'plague', 'blight', 'fog_up', 'haze']

['this is overcloud stormicide']

计数为1,因为overcloud出现在第一个子列表中(lis_of_lis)

因为stormicide没有出现在第一个列表中

['storm', 'squall', 'overcloud',...,'cloud_up', 'cloud_over', 'plague', 'blight', 'fog_up', 'haze']

[there was a plague]

计数为1,因为plague出现在第一个子列表中(lis_of_lis)

因此是所需的输出[2,1,1]

所有答案的问题在于计算单词中的所有子字符串而不是完整单词

3 个答案:

答案 0 :(得分:1)

result = []
for sentence in lis_of_lis:
    result.append(0)
    for word in list_strings:
        if word in sentence[0]:
            result[-1]+=1
print(result)

的长版本
result = [sum(1 for word in list_strings if word in sentence[0])  for sentence in lis_of_lis]

这将为您的示例返回[2,2,1]。

如果您只想要整个单词,请在单词/句子之前和之后添加空格:

result = []
for sentence in lis_of_lis:
    result.append(0)
    for word in list_strings:
        if ' '+word+' ' in ' '+sentence[0]+' ':
            result[-1]+=1
print(result)

或简短版本:

result = [sum(1 for word in list_strings if ' '+word+' ' in ' '+sentence[0]+' ')  for sentence in lis_of_lis]

这将为您的示例返回[2,1,1]。

答案 1 :(得分:1)

您可以在列表理解中使用sum函数:

[sum(1 for i in list_strings if i in sub[0]) for sub in lis_of_lis]

答案 2 :(得分:0)

这会创建一个字典,其中list_string中的单词作为键,值从0开始。然后迭代lis_of_lis,将短语拆分为单词列表,遍历单词,并检查它们是否是在字典里。如果是,则将1添加到相应的值。

    word_count = dict()
    for word in list_string:
        word_count[word] = 0

    for phrase in lis_of_lis:
        words_in_phrase = phrase.split()
        for word in words_in_phrase:
            if word in word_count:
                word_count[word] += 1

这将创建一个字典,其中的单词为键,频率为值。我将留给您从该数据结构中获取正确的输出。