【问题标题】:Splitting a string by multiple keywords and creating a dict按多个关键字拆分字符串并创建字典
【发布时间】:2020-02-13 22:06:04
【问题描述】:

在做了一些网页抓取之后,我终于能够从字体正文中获取一个字符串,结果如下

string = Date:  02/13/2020  Court Time:  1030  Court Room:  0206  Microfilm:  SD000000000

我需要弄清楚我的代码的最后一件事,我想此时它似乎相当微不足道,就是将该字符串拆分为字典对,其中配对如下所示:

Date:  02/13/2020,
Court Time:  1030,  
Court Room:  0206,  
Microfilm:  SD000000000

我想过可能会做一些事情,例如:

keywords = ['Date:','Court Time:','Court Room:', 'Microfilm:']
for k in keywords:
            print(string.split())

使用这些关键字作为分隔符。 但它多次吐出这个

['Date:', '02/13/2020', 'Court', 'Time:', '1030', 'Court', 'Room:', '0206', 'Microfilm:', 'SD000000000']
['Date:', '02/13/2020', 'Court', 'Time:', '1030', 'Court', 'Room:', '0206', 'Microfilm:', 'SD000000000']
['Date:', '02/13/2020', 'Court', 'Time:', '1030', 'Court', 'Room:', '0206', 'Microfilm:', 'SD000000000']
['Date:', '02/13/2020', 'Court', 'Time:', '1030', 'Court', 'Room:', '0206', 'Microfilm:', 'SD000000000']

【问题讨论】:

  • 是的,因为你在做for k in keywords

标签: python string dictionary split regex-group


【解决方案1】:

根据你的例子:

s='Date:  02/13/2020  Court Time:  1030  Court Room:  0206  Microfilm:  SD000000000'

假设你的分隔符是双空格:

sep = '  '
lst = s.split(sep)
d = dict(zip(lst[0::2], lst[1::2]))

输出是:

 {'Date:': '02/13/2020',
  'Court Time:': '1030',
  'Court Room:': '0206',
  'Microfilm:': 'SD000000000'}

【讨论】:

    【解决方案2】:

    我会使用正则表达式并为关键字列表构建模式:

    pattern = '|'.join(['(' + i + ')' for i in keywords])
    

    这给了'(Date:)|(Court Time:)|(Court Room:)|(Microfilm:)'

    我们现在可以使用该模式拆分字符串:

    lst = re.split(pattern, string)
    

    到达这里:['', 'Date:', None, None, None, ' 02/13/2020 ', None, 'Court Time:', None, None, ' 1030 ', None, None, 'Court Room:', None, ' 0206 ', None, None, None, 'Microfilm:', ' SD000000000']

    让我们对列表进行后期处理以提取最终字典的键和值:

    def getkey(ls):
        for i in ls:
            if i is not None:
                return i.strip().rstrip(':')
    
    lk = len(keywords)
    elts = [(lst[i: i+lk)], lst[i+lk]) for i in range(1, len(lst), lk+1)]
    resul = {getkey(i): j.strip() for i,j in elts}
    

    这给出了预期的结果:

    {'Date': '02/13/2020', 'Court Time': '1030', 'Court Room': '0206', 'Microfilm': 'SD000000000'}
    

    【讨论】:

      【解决方案3】:

      下面的一段代码就可以解决问题。

      my_string = "Date:  02/13/2020, Court Time:  1030, Court Room:  0206,  Microfilm:  SD000000000"
      key_value_pair = [line.split(':') for line in my_string.split(',')]
      output_dict = {k.strip(): v.strip() for k, v in key_value_pair}
      print(output_dict)
      

      输出:

      {'Date': '02/13/2020', 'Court Time': '1030', 'Court Room': '0206', 'Microfilm': 'SD000000000'}
      

      【讨论】:

      • 这也可以,但我的没有逗号,所以它会被 split(' ') 而不是 split(',')
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多