这很容易实现,但我可以找到一个很好的实现。我试图在txt文件中对不同组的值求和。我们假设我们有一个文件,其中每一行如下:
------------------------
Blank line
class 1
value 10
------------------------
Blank line
class 2
value 20
------------------------
Blank line
class 1
value 15
------------------------
Blank line
class 1
value 20
------------------------
Blank line
class 2
value 10
我正在考虑创建一个字典,将类设置为键,将每个键的值总和设置为字典值。例如,输出应为:
my_dict = {'class 1': 45, 'class 2': 30}
。我之前对数据集进行了检查,并意识到当然有500个不同的类具有不同的值和。我的第一个虽然是为此目的使用字典,但不知道是否是最好的方法。我所做的是为每一行创建一个字典,其中有一个类,但这样我有很多字典,其中一些重复。但我可以使用Counter fucntion from Collenctions
来总结它们,但绝对不是最好的方法。
有什么建议吗?
答案 0 :(得分:2)
使用正则表达式和defaultdict
:
import re
from collections import defaultdict
dct = defaultdict(int)
with open('test.txt') as f:
data = re.findall(r'(class\s\d+).*\nvalue\s(\d+)', f.read())
for k, v in data:
dct[k] += int(v)
print(dct)
输出:
defaultdict(<class 'int'>, {'class1': 45, 'class2': 30})
您可以查看正则表达式:(class\s\d+).*\nvalue\s(\d+)
我必须添加.*
,因为输入中的某些行最后会有随机空格。如果这是复制错误,则不需要它。