正则表达式:使用字典理解和正则表达式将字符串转换为字典

Regex: convert a string to a dictionary using dict comprehension and regex

我有一个字符串,我想将其转换为字典。我想要做的是 select 大写字符作为字典的键并将它们计数为值。如果一个大写字符后跟一个小写字符(或连续几个),它应该作为一个新键。假设字符串是 IIrIIrIrIrIIrIIrIrIrII,那么输出应该是这样的: {'I': 6, 'Ir': 8}。相反,我得到 {'Ir': 8, 'I': 14}.

这是我的:

def convert(string):
    return {el: string.count(el) for el in re.findall('[A-Z][a-z]*', string)}

我卡在正则表达式部分了。如果字符串是 AIrAIrIrIrAIrAIrIrIrAA,那么我得到正确的输出。

请帮忙, 谢谢

使用Counter:

from collections import Counter

def convert(string):
    return Counter(re.findall('[A-Z][a-z]*', string))

示例:

>>> convert('IIrIIrIrIrIIrIIrIrIrII')
Counter({'Ir': 8, 'I': 6})

如果您不想 return 一个 Counter,您可以将 return 包装在 dict() 中。或者如果你需要的话,就在函数之外做。

您的代码中的问题是计数来自检查 string.count(thing),因此您正在计算 所有'I',包括'Ir'.

的一部分