如何统计列表中的单词?

时间:2018-04-08 20:16:01

标签: python python-3.x algorithm

我有一个像这样的列表列表:[['Hello', 'Hi'], ["Hola", "Hi", "Ciao"], ["Ciao", "Hi"]]。 我想要做的是创建一个字典,其中键是我的列表列表中的每个单词,值是单词出现在我的键出现的小列表中的字数。

期望的输出:

dict = {'Hello': {'Hi':1}, 'Hi': {'Hello':1, 'Hola':1, 'Ciao':2},
        'Hola':{'Hi':1, 'Ciao':1}, 'Ciao':{'Hola':1, 'Hi':2}}

注意:我知道如何使用Python以及如何处理数据结构,但我正在努力     算法。我的意思是我应该拥有多少循环以及我的条件应该是多少?

1 个答案:

答案 0 :(得分:0)

只考虑一个列表:['Hello', 'Hi']。这会在您的输出(Hi -> Hello)(Hello -> Hi)中生成两个“对”。要处理其中一个列表,我们正在查看类似的内容:

for x in l:
    for y in l:
        if x != y:
           [update the count of x -> y]

(您可以使用itertools.combinationsitertools.permutations(取决于偏好)将其转换为一个循环。)

那么我们应该如何存储计数呢?如上所述,内部词典称为Counter的实例,因为它基本上是一个字典,如果缺少密钥则默认为0(意味着您不必检查密钥的存在,您可以只增加值)。如果你的外部字典可能是一个默认为空的计数器的字典会很方便,你可以使用defaultdict来完成。

我会留给你编写代码来更新计数并处理所有列表,但希望这足以让你走上正确的道路。 (defaultdictCounter都在collections。我最初发现defaultdict文档有点混乱 - 你用counts = defaultdict(Counter)创建一个。)< / p>