我有一个字典,我想看看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将状态视为字符串。结果,状态没有值()。
答案 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)