извлечение данных из строки и сохранение в словаре python3x - PullRequest
0 голосов
/ 03 октября 2019

У меня есть следующая строка

s='''
gulf energy 8"x3" drilling jar (6"5/8 reg box x pin) received 01/06/2019   ** schlumberger 6"1/2 drilling jar
** gulf energy 8"x3" drilling jar (6"5/8 reg box x pin) received 01/06/2019   ** schlumberger 6"1/2 drilling jar
** gulf energy 8"x3" drilling jar (6"5/8 reg box x pin) received 01/06/2019   ** schlumberger 6"1/2 drilling jar
'''

и следующий словарь

G_Energy = {'4"3/4': 0, '6"': 0, '6"1/2': 0, '8"': 0, '8"1/4': 0}

Я хочу найти строку и, если любой из размеров соответствует любому из ключей словаря, добавить1 к значению ключа, как я буду это делать, имейте в виду, я ищу красноречивое решение, которое у меня есть, как большой объем данных

1 Ответ

0 голосов
/ 03 октября 2019

Используйте регулярное выражение Python * , чтобы найти совпадения в строке, и collections.Counter, чтобы упростить подсчет:

s='''
gulf energy 8"x3" drilling jar (6"5/8 reg box x pin) received 01/06/2019   ** schlumberger 6"1/2 drilling jar
** gulf energy 8"x3" drilling jar (6"5/8 reg box x pin) received 01/06/2019   ** schlumberger 6"1/2 drilling jar
** gulf energy 8"x3" drilling jar (6"5/8 reg box x pin) received 01/06/2019   ** schlumberger 6"1/2 drilling jar
'''

import re
import collections

# collections.Counter uses default keys with values of 0
count = collections.Counter()

# specify whatever regex you need
RE = re.compile(r'[0-9]+"([0-9]+/[0-9]+)?')

# for each match, add 1 to the counter
for f in RE.finditer(s):
    dimension = f.string[slice(*f.span())]
    count[dimension] += 1

print(count)

Выходы

Counter({'8"': 3, '3"': 3, '6"5/8': 3, '6"1/2': 3})

Если вы действительно хотите ограничить размеры, которые у вас есть в последнем дикте, отфильтруйте их позже:

keep_dimensions = set(('4"3/4', '6"', '6"1/2', '8"', '8"1/4'))
G_Energy = {k:count[k] for k in keep_dimensions}

дает

{'6"': 0, '6"1/2': 3, '4"3/4': 0, '8"1/4': 0, '8"': 3}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...