如何正确拆分字符串以在python中创建字典?

詹姆士

我有两个字符串

TOP:棉+绣花(2 MTR)\ n BOTTOM:棉+固体(2 MTR)\ n DUPATTA:雪纺+蕾丝工作(2 MTR)\ n TYPE:UN缝合\ n COLOR:多色\ n CONTAINS:1顶部带衬里 1 底部和 1 DUPATTA\n原产国:印度”

第二个是

"上衣面料:棉麻+上衣长:0-2.00\n下衣面料:棉麻+下衣长:0-2.00\nDupatta面料:Nazneen + Dupatta长:0-2.00\n里料:棉麻布\n类型:未缝合\ n图案:印刷\n多件装:3顶\n原产国:印度”

我需要用这两个字符串创建 python 字典,但键在冒号之前

例如在字符串中,一个键是

顶部、底部、杜帕塔、类型、颜色、包含、原产国

第二个

钥匙将是

上衣面料,下衣面料,上衣长度,下衣长度,Dupatta 面料,Dupatta 长度,衬里面料,类型,图案,多件装,原产国

到目前为止我已经使用了

keys = ["Top Fabric","Bottom Fabric","Dupatta Fabric","Lining Fabric","Type","Pattern","Multipack","TOP ","BOTTOM ","  DUPATTA ","COLOUR ","CONTAINS ","TYPE ","Country"] 

pattern = re.compile('({})\s+'.format(':|'.join(keys))) 
newdict = dict(zip(*[(i.strip() for i in (pattern.split(desc.replace("*",""))) if i)]*2))

但它不适用于第一个字符串和第二个字符串它不是创建每个键和值

第四只鸟

您可以使用与组 1 中冒号之前和组 2 中冒号之后的部分匹配的正则表达式模式。

然后断言在第 2 组之后,还有另一部分以 a 开头,+后跟:或字符串的结尾。

然后创建一个字典,剥离组 1 和组 2 的值。

(?:\s*\+\s*)?([^:]+)\s*:\s*([^:]+)(?=\+[^:+]*:|$)

模式匹配:

  • (?:\s*\+\s*)?可选地匹配+可选空白字符之间符号
  • ([^:]+)捕获组 1,匹配除:
  • \s*:\s*匹配:可选空白字符之间的a
  • ([^:]+)捕获组 2,匹配除:
  • (?=\+[^:+]*:|$)正向前瞻,断言+后跟 :向右,或断言字符串的结尾

正则表达式演示| Python 演示

例子

import re
import pprint

pattern = r"(?:\s*\+\s*)?([^:\r\n]+)\s*:\s*([^:\r\n]+)\s*(?=\+[^:+\n]*:|$)"

s = ("TOP : Cotton + Embroidered ( 2 Mtr) \n"
            "BOTTOM : Cotton + Solid (2 Mtr) \n"
            "DUPATTA : Chiffon + Lace Work ( 2 Mtr) \n"
            "TYPE : Un Stitched\n"
            "COLOUR : Multi Colour \n"
            "CONTAINS : 1 TOP WITH LINING 1 BOTTOM & 1 DUPATTA\n"
            "Country of Origin: India\n\n"
            "Top Fabric: Cotton Cambric + Top Length: 0-2.00\n"
            "Bottom Fabric: Cotton Cambric + Bottom Length: 0-2.00\n"
            "Dupatta Fabric: Nazneen + Dupatta Length: 0-2.00\n"
            "Lining Fabric: Cotton Cambric\n"
            "Type: Un Stitched\n"
            "Pattern: Printed\n"
            "Multipack: 3 Top\n"
            "Country of Origin: India")

dictionary = {}
for m in re.finditer(pattern, s, re.MULTILINE):
    dictionary[m.group(1).strip()] = m.group(2).strip()
pprint.pprint(dictionary)

输出

{'BOTTOM': 'Cotton + Solid (2 Mtr)',
 'Bottom Fabric': 'Cotton Cambric',
 'Bottom Length': '0-2.00',
 'COLOUR': 'Multi Colour',
 'CONTAINS': '1 TOP WITH LINING 1 BOTTOM & 1 DUPATTA',
 'Country of Origin': 'India',
 'DUPATTA': 'Chiffon + Lace Work ( 2 Mtr)',
 'Dupatta Fabric': 'Nazneen',
 'Dupatta Length': '0-2.00',
 'Lining Fabric': 'Cotton Cambric',
 'Multipack': '3 Top',
 'Pattern': 'Printed',
 'TOP': 'Cotton + Embroidered ( 2 Mtr)',
 'TYPE': 'Un Stitched',
 'Top Fabric': 'Cotton Cambric',
 'Top Length': '0-2.00',
 'Type': 'Un Stitched'}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章