我想创建一个字典来拆分分子式的所有元素。我尝试使用 re 模块
Formula="C16H21NO2Na3"
pat = re.compile('(?P<name>[A-Z][a-z]+)\[0-9]+(?P<name2>[0-9]+)')
molecule= pat.findall(Formula)
print (molecule)
我期待这个回报:
{'C': 16, 'H': 21, 'N': '', 'O': 2, 'Na': 3}
你离得很近
pat = re.compile('(?P<name>[A-Z][a-z]?)(?P<value>[0-9]*)')
name
是一个大写字母,后跟零个或 1 个小写字母,并且value
是 0 个或多个数字
然后让它成为一个 dict 你只需调用 dict 就可以了
matches = pat.findall(Formula)
data = dict(matches)
# {'C': '16', 'H': '21', 'N': '', 'O': '2', 'Na': '3'}
您可以使用 dict 更复杂,如下所示
data = {k: int(v) if v else 1 for k,v in matches}
# {'C': 16, 'H': 21, 'N': 1, 'O': 2, 'Na': 3}
# the following will also work, which is slightly shorter (thanks @copperfield)
data = {k: int(v or 1) for k,v in matches}
# {'C': 16, 'H': 21, 'N': 1, 'O': 2, 'Na': 3}