python - 如何拆分一个字符串并在 python 中返回它的分隔符?

标签 python dictionary

我有一个如下所示的字符串:

string1 = "47482M4I14M7I7M1I26M8D25M4I20M2I11M7I17M7I7M22I14M3I35M3I30M1D15M2I16M17D4M5D15M7D37M1D24M5D5M6D27M4I35M11I10M3I5M3I24M15I175M3D13M236792H"

我想按字母(即 A-Z 或 a-z)分隔并将关联值放入列表字典中。 每组数字都与字母相关联。例如,

“M”与 47482、14、7I7 等相关

'I' 与 4、1 等相关联

'H' 与 236792 相关联

我的最终数据结构将是这样的

    dict = { 
      M:[47482, 14, 717],
      I:[4, 1],
      H:[236792]

    }

我的尝试:

import re
string1 = "47482M4I14M7I7M1I26M8D25M4I20M2I11M7I17M7I7M22I14M3I35M3I30M1D15M2I16M17D4M5D15M7D37M1D24M5D5M6D27M4I35M11I10M3I5M3I24M15I175M3D13M236792H"
tmp = re.split('[a-zA-Z]', string1)
print(tmp)

我无法将这些字母作为分隔符。需要帮助来创建数据结构。

最佳答案

您走在正确的轨道上,但您应该使用稍微不同的正则表达式并使用 re.findall .像这样:

In [1]: string1 = "47482M4I14M7I7M1I26M8D25M4I20M2I11M7I17M7I7M22I14M3I35M3I30M1D15M2I16M17D4M5D15M7D37M1D24M5D5M6D27M4I35M11I10M3I5M3I24M15I175M3D13M236792H"

In [2]: import re, collections

In [3]: p = re.compile("([0-9]+)([A-Za-z])")

In [4]: dct = collections.defaultdict(list)

In [5]: for number, letter in p.findall(string1):
    ...:     dct[letter].append(number)
    ...:      

In [6]: dct
Out[6]: 
defaultdict(list,
            {'D': ['8', '1', '17', '5', '7', '1', '5', '6', '3'],
             'H': ['236792'],
             'I': ['4', '7', '1', '4', '2', '7', '7', '22', '3', '3', '2', '4', '11', '3', '3', '15'],
             'M': ['47482', '14', '7', '26', '25', '20', '11', '17', '7', '14', '35', '30', '15', '16', '4', '15', '37', '24', '5', '27', '35', '10', '5', '24', '175', '13']})

这会找到字符串中所有数字对后跟一个字母,并将所有这些数字对放入一个以字母为键的字典中,允许重复数字。

关于python - 如何拆分一个字符串并在 python 中返回它的分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45326660/

相关文章:

python时间字符串与格式不匹配

python - 使用 joblib 在 sklearn 中重用 cross_val_score 拟合的模型

python - boto3 签名的 url 导致 SignatureDoesNotMatch

python - 将类型为 'object' 的数据帧列转换为类型列表

scala - 为什么 Scala 中没有可变的 TreeMap?

Swift - 如果键值字典中的值包含另一个键值对怎么办?

python - 将曲线拟合到散点图的边界

javascript - 如何在javascript中实现字典?

ios - 如何使用json字典,让key为空value不select?

ios - 如何检索某些 childByAutoId() 键