Создать словарь для подсчета значений на группу в текстовом файле - PullRequest
0 голосов
/ 25 апреля 2018

Это может быть очень легко реализовать, но я могу найти хорошую реализацию. Я пытаюсь суммировать значения для разных групп в текстовом файле. Допустим, у нас есть файл, каждая строка которого выглядит следующим образом:

------------------------
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, но определенно это не лучший способ. Любое предложение?

1 Ответ

0 голосов
/ 25 апреля 2018

Использование регулярных выражений и 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+)

Мне пришлось добавить в .*, потому что некоторые строки в вашем входе имеют случайный пробел в конце.Если это была ошибка копирования, она вам не нужна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...