将计数器转换为具有链接列表值的哈希表

时间:2018-02-01 15:39:27

标签: python python-3.x data-structures nltk tokenize

我有3个计数器,不同字符串的字频总数。

Counter({u'childhood': 3, u'waiting': 2}) #counter1
Counter({u'childhood': 5}) #counter2
Counter({u'waiting': 2}) #counter 3

Atm我能够执行计数器添加以获得所有计数器中所有单词的总字数。

Counter({u'childhood': 8, u'waiting': 4})

然而,我需要取每个计数器并将它们插入一个哈希表,其中单词为key,链接列表为值,其中每个链接的条目具有每个计数器的每个字符串的计数。

实施例

[childhood] : [1,3] -> [2,5] #counter 1 - 3 times | counter 2 - 5 times
[waiting] : [1,3] -> [3,2]

如何在Python中实现这一目标?我在考虑里面有一个deque的字典?或者扩展计数器添加功能?

我试图使用现有的python数据结构而不扩展或创建自定义数据结构实现。

2 个答案:

答案 0 :(得分:1)

假设你有一些序列counters

total = sum(counters, Counter())

table = {word: [counter[word] for counter in counters] for word in total}

会给你一个像

这样的词典
{
 'childhood': [3, 5, 0],
 'waiting': [2, 0, 2]
}

答案 1 :(得分:1)

您可以使用defaultdict(list)将每个条目存储为元组:

from collections import Counter, defaultdict

counters = [
    Counter({u'childhood': 3, u'waiting': 2}), #counter1
    Counter({u'childhood': 5}),                #counter2
    Counter({u'waiting': 2})]                  #counter3    

combined = defaultdict(list)

for number, counter in enumerate(counters, start=1):
    for word, count in counter.items():
        combined[word].append((number, count))

print(combined['childhood'])
print(combined['waiting'])

哪会给你:

[(1, 3), (2, 5)]
[(1, 2), (3, 2)]