如何将此代码的输出转换为一个具有键:值对总数的字典?
import re
from collections import Counter
splitfirst = open('output.txt', 'r')
input = splitfirst.read()
output = re.split('\n', input)
for line in output:
counter = Counter(line)
ab = counter.items() #gives list of tuples will be converted to dict
abdict = dict(ab)
print abdict
以下是我得到的一个示例:
{' ': 393, '-': 5, ',': 1, '.': 1}
{' ': 382, '-': 4, ',': 5, '/': 1, '.': 5, '|': 1, '_': 1, '~': 1}
{' ': 394, '-': 1, ',': 2, '.': 3}
{'!': 1, ' ': 386, 'c': 1, '-': 1, ',': 3, '.': 3, 'v': 1, '=': 1, '\\': 1, '_': 1, '~': 1}
{'!': 3, ' ': 379, 'c': 1, 'e': 1, 'g': 1, ')': 1, 'j': 1, '-': 3, ',': 2, '.': 1, 't': 1, 'z': 2, ']': 1, '\\': 1, '_': 2}
我有400个这样的词典,理想情况下我必须将它们合并在一起,但是如果我理解正确Counter不会全部给它们,而是一个接一个地给它们。
任何帮助将不胜感激。
答案 0 :(得分:1)
+
运算符合并计数器:
>>> Counter('hello') + Counter('world')
Counter({'l': 3, 'o': 2, 'e': 1, 'r': 1, 'h': 1, 'd': 1, 'w': 1})
因此您可以使用sum
来合并它们的集合:
from collections import Counter
with open('output.txt', 'r') as f:
lines = list(f)
counters = [Counter(line) for line in lines]
combined = sum(counters, Counter())
(您也不需要使用正则表达式将文件拆分为行;它们已经是行的迭代。)
答案 1 :(得分:0)
以下是您问题的mcve:
import re
from collections import Counter
data = """this is the first line
this is the second one
this is the last one
"""
output = Counter()
for line in re.split('\n', data):
output += Counter(line)
print output
在你的例子中应用这个方法你会得到这个:
import re
from collections import Counter
with open('output.txt', 'r') as f:
data = f.read()
output = Counter()
for line in re.split('\n', data):
output += Counter(line)
print output