如何比较Python列表中的对?

时间:2019-02-10 12:27:19

标签: python list loops nltk

我试图遍历两个列表的串联列表,这些列表本质上是一袋单词-示例输出yields [['brexit',11),('say',11),('uk',7 ),('eu',6),('deal',5),('may',5),...,('brexit',35),('say',28),,('may ',5),('uk',1),...]

从.txt文件中收集了所有文本输入后,我已经删除了停用词,并使用词干删除了时态中的重复项。

我要采取的下一步是遍历列表,查找给定单词的出现次数差异-我希望将'brexit','say'和'uk'标记为重要单词,要么是两个出现次数,要么就是差异。我的代码开头(部分为python,部分为伪代码)如下。

def findSimilarities (word, count):
    for (word, count) in biasDict:
        if word == word and count != count:
            print (word, count - count)
        elif word ==word and count == count:
            del (word, count)
        (word, count)++

关于如何处理此问题以及如何编辑代码的任何建议?如果更好,我可以让这些单词来自两个单独的列表(这是它们的创建方式;创建它们后将它们串联在一起)。

非常感谢。

3 个答案:

答案 0 :(得分:0)

这是一个选择。效率不高,但是输出是所需的。也就是说,如果您要删除具有相同计数的单词(如代码中所示)。如果要保留条目,只需跳过biasDict.remove()部分。 如果您只是对重复出现两次且具有不同计数的单词感兴趣,则可以将元组附加到新列表中,而不必打印差异。然后返回新列表。

import numpy as np

def findSimilarities (biasDict):
    similarities = {}
    #remove_later = []
    for i in range(0, len(biasDict)):
        word, count = biasDict[i][0], biasDict[i][1]
        for c in range(0, len(biasDict)):
            word_compare, count_compare = biasDict[c][0], biasDict[c][1]
            if c==i:
                pass #Same entry
            elif word == word_compare and count != count_compare:
                delta = count - count_compare
                if word not in similarities and delta != 0:
                    similarities[word] = np.abs(delta)
            #elif word == word_compare and count == count_compare and (word, count) not in remove_later:
            #    remove_later.append((word, count))
    #for entry in remove_later:
    #    biasDict.remove(entry)
    return similarities
biasDict =  [('brexit', 11), ('say', 11), ('uk', 7), ('eu', 6), ('deal', 5), ('may', 5), ('brexit', 35), ('say', 28), ('may', 5), ('uk', 1)]
print(findSimilarities(biasDict))

输出:

{'brexit': 24, 'say': 17, 'uk': 6}

答案 1 :(得分:0)

合并事件的想法对我来说似乎不错。这是我的实现。任何评论或优化都表示赞赏。

def merge_list(words_count_list):
updated_list = list()
words_list = list()
for i in range(len(words_count_list)):
    word = words_count_list[i][0]
    count = words_count_list[i][1]
    if word not in words_list:
        words_list.append(word)
        for j in range(i+1,len(words_count_list),1):
            if word == words_count_list[j][0]:
                count += words_count_list[j][1]
        updated_list.append((word,count))
return updated_list

print(merge_list([('brexit', 11), ('say', 11), ('uk', 7), ('eu', 6), ('deal', 5), ('may', 5), 
                                                ('brexit', 35), ('say', 28),('may', 5), ('uk', 1)]))

输出:

[('brexit', 46), ('say', 39), ('uk', 8), ('eu', 6), ('deal', 5), ('may', 10)]

现在,您可以指定单词数的阈值,按数量排序,然后删除最重要的单词。

答案 2 :(得分:0)

假设您有两个单词列表,则可以这样做

x

示例输出

i in eachindex(y)