如果我的字符串是匹配正则表达式[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
但这看起来有点笨重,我想知道是否有更好的方法。
答案 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')
这将为长字符串提供良好的性能,因为如果所有三个字符都出现在字符串的开头,则搜索可以提前停止。它不需要搜索整个字符串。