正则表达式:使用字典理解和正则表达式将字符串转换为字典
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'
.
的一部分
我有一个字符串,我想将其转换为字典。我想要做的是 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'
.