在字符串中搜索字典值

时间:2015-07-24 18:30:28

标签: python python-2.7

我有一个字典,我想看看astring是否包含字典中的任何键。如果是这样,我想用字典中的相应值替换它。

states = {
     'Alaska' : 'AK',
     'Alabama' : 'AL',}
astring = "I love Alaska"

for state in states:
     if state in astring:
        print astring.replace(state, state.value())

这当然不起作用,因为在使用For循环迭代键时,python将状态视为字符串。结果,状态没有值()。

4 个答案:

答案 0 :(得分:3)

您可以使用for循环中的键作为状态字典的键。这应该适合你。

states = {
     'Alaska' : 'AK',
     'Alabama' : 'AL',}
astring = "I love Alaska"

for state in states:
     if state in astring:
        print astring.replace(state, states[state])

效率可能较低,但您也可以这样做

states = {
     'Alaska' : 'AK',
     'Alabama' : 'AL',}
astring = "I love Alaska"

for state, abbreviation in states.items():
     if state in astring:
        print astring.replace(state, abbreviation)

答案 1 :(得分:3)

您的变量state是一个字符串,没有方法.value()。如果您想同时使用键和值,我建议迭代这些条目:

for state, abbr in states.items():
    if state in astring:
       print astring.replace(state, abbr)

答案 2 :(得分:0)

考虑astring= 'I love Alaska and Alabama'的情况。然后使用

new_string = ' '.join([states[word] if word in states else word for word in astring.split()])
#'I love AK and AL'

答案 3 :(得分:0)

另一种方式,更慢但更短:

import re

states = {
    'Alaska' : 'AK',
    'Alabama' : 'AL',
}

# build a regexp
pattern = re.compile(
    r'\b(%s)\b' % '|'.join(re.escape(needle) for needle in states)
)

astring = "I love Alaska"

print pattern.sub(lambda match: states.get(match.group()) or match.group(), astring)