python - 文件中多个单词/值的总出现次数
问题描述
我有一个包含大量文本的文件。我正在阅读此文件,并打算打印出引用圣经段落的次数,并以“Verse”开头的行注明。然后我想打印出引用,然后是出现次数。
示例文件:
Verse- Matthew 5:2
Commentary- Matthew
Verse- Matthew 10:5
Verse- John 3:16
Commentary- John
Verse- Luke 5:2
Commentary- Luke
结果应该是这样的:
{'5:2': 2, '10:5': 1, '3:16': 1}
我正在使用字典来制作键:参考值:出现次数。该脚本很短,并提供:
fileHandle = open("sj", "r")
occurrences = dict()
references = []
#Go through each line if it is a verse line (starts with "Verse"), seperate the reference and count the reference
for line in fileHandle:
if "Verse" in line:
verseLine = line.split()
references.append(verseLine[2]) #Reference is always 3rd index
for reference in references:
if reference not in occurrences:
occurrences[reference] = 1
else:
occurrences[reference] = occurrences[reference] + 1
print(" References printed below ")
print(references)
print(" Occerances printed below ")
print(occurrences)
问题:引用的计数方式很奇怪。这是我的输出:
{'5:2': 5, '10:5': 3, '3:16': 2}
显然这是不对的!这与else:
我认为的陈述有关。例如,如果我将其更改为occurrences[reference] = occurrences[reference] + 2
(注意 1 更改为 2),那么我希望结果会翻倍。但他们不会:
{'5:2': 9, '10:5': 5, '3:16': 3}
为什么这个计数不正确?
解决方案
另一个版本使用re
and collections.Counter
:
data = '''Verse- Matthew 5:2
Commentary- Matthew
Verse- Matthew 10:5
Verse- John 3:16
Commentary- John
Verse- Luke 5:2
Commentary- Luke'''
import re
from collections import Counter
c = Counter( re.findall(r'^Verse.*?(\d+:\d+)$', data, flags=re.M) )
print(dict(c))
印刷:
{'5:2': 2, '10:5': 1, '3:16': 1}
推荐阅读
- cordova - 获取指纹 AIO 错误:当我尝试运行应用程序时 plugin_not_installed
- python - 硒蟒 | 等待整个页面加载,不依赖于动态元素
- flutter - DioError [DioErrorType.RESPONSE]:Http 状态错误 [404]
- react-native - 如何解决 React Native 构建错误?
- html - 带有 CSS 选择器的点击元素在 Google 跟踪代码管理器中不起作用
- php - Mysql PHP 查询。您如何将数据库中的两个不同列“排序”在一起?
- authentication - 如何检查来自另一个 keycloak 实例 B 的身份验证 keycloak 实例 A 用户?
- java - 在java中将值从一个表单传递到另一个表单
- android - 从 Kotlin 中的不同类将数据添加到 MainActivity 中的列表
- c++ - 我可以为 argv 赋值吗?