我正在尝试使用python按字母顺序排序一个双元组的元组列表。我的输出现在看起来像这样:

('hello', 'how')
('how', 'are')
('are', 'you')
('you', '?')
('Are', 'you')
('you', 'okay')
('okay', '?')


我希望输出看起来像这样,按字母顺序排列,每个二元组只出现一次,最好有一个频率计数:

('are', 'you'), 2
('hello', 'how'), 1
('how', 'are'), 1
('okay', '?'), 1
('you', 'okay'), 1
('you', '?'), 1


我的代码如下所示:

def bigram(x):
    with open (x, 'r', encoding='utf-8') as f:
        mylist = f.read()
        n = 2
        grams = ngrams(nltk.word_tokenize(mylist), n)
        for bigrams in grams:
            return bigrams


我真的很感谢您的帮助,谢谢!

最佳答案

您需要执行几个步骤(阅读grams之后):

首先,将所有内容都小写以方便查找加倍:

grams = [ (a.lower(), b.lower()) for (a, b) in grams ]


其次,将grams分组并计数:

import collections
counted = collections.Counter(grams)


第三,对计数的东西进行排序:

for gram, count in sorted(counted.items()):
    print gram, count

10-04 13:42