Python:将字符串转换为标志

时间:2010-05-18 15:52:49

标签: python string dictionary

如果我的字符串是匹配正则表达式[MSP]*的输出,那么将它转换为包含键M,S和P的dict的最简洁方法是什么,其中每个键的值为true,如果键出现在字符串中?

e.g。

 'MSP' => {'M': True, 'S': True, 'P': True}
 'PMMM'   => {'M': True, 'S': False, 'P': True}
 ''    => {'M': False, 'S': False, 'P': False}
 'MOO'    won't occur... 
          if it was the input to matching the regexp, 'M' would be the output

我能想到的最好的是:

 result = {'M': False, 'S': False, 'P': False}
 if (matchstring):
     for c in matchstring:
         result[c] = True

但这看起来有点笨重,我想知道是否有更好的方法。

2 个答案:

答案 0 :(得分:6)

为什么不使用frozenset(或set如果需要可变性?)

s = frozenset('PMMM')
# now s == frozenset({'P', 'M'})

然后你可以使用

'P' in s

检查标志P是否存在。

答案 1 :(得分:3)

在较新版本的Python中,您可以使用dict理解:

s = 'MMSMSS'
d = { c: c in s for c in 'MSP' }

在旧版本中,您可以像KennyTM指出的那样使用它:

d = dict((c, c in s) for c in 'MSP')

这将为长字符串提供良好的性能,因为如果所有三个字符都出现在字符串的开头,则搜索可以提前停止。它不需要搜索整个字符串。