【问题标题】:extracting data from a string and store in a dictionary python3x从字符串中提取数据并存储在字典python3x中
【发布时间】:2019-10-03 16:45:55
【问题描述】:

我有以下字符串

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 添加到键的值 我将如何做到这一点请记住,我正在寻找一个雄辩的解决方案,我拥有大量数据

【问题讨论】:

  • pythons count()方法是你想要的吗?
  • 它是分隔数据的条件,而不仅仅是方法 count 是我所追求的,因为我应用了 count 并且它获取了所有值,而不仅仅是我想要的值,我需要构造一个参数来检查是否一行中的一个单词,然后计算该行中的数字

标签: python string dictionary data-structures


【解决方案1】:

使用 Python 的 regular expression 查找字符串中的匹配项,使用 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}

【讨论】:

    猜你喜欢
    • 2014-09-23
    • 2020-12-30
    • 2023-01-13
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 2016-06-24
    • 2022-06-10
    • 1970-01-01
    相关资源
    最近更新 更多