2015-08-15 148 views
0

我有一个字符串,我想要转换为字典。我想要做的是选择大写字母作为字典的键并将它们计数为值。如果一个大写字母后跟一个小写字母(或一行中的几个字母),它应该作为一个新的关键字。假设字符串是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,那么我会得到正确的输出。

请帮助, THX

回答

1

使用Counter

from collections import Counter 

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

例子:

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

你可以用在dict()这回如果你不想返回Counter。如果需要,也可以在功能外部进行。

在你的代码的问题是,计数从检查string.count(thing)来,所以你计算所有'I'的,包括是'Ir'一部分的人。

+1

我不知道柜台的存在。谢谢,我学到了一件新东西:) – Sensei