替换python字典格式中的文本

替换python字典格式中的文本,python,dictionary,Python,Dictionary,我想把美国各州的全称形式的文本字符串替换为缩写形式,正如我在上面写的那样,我制作了字典 state_dict = {'Alabama' :'AL' ,'Montana': 'MT', 'Alaska' :'AK', 'Nebraska': 'NE', 'Arizona': 'AZ', 'Nevada': 'NV', 'Arkansas': 'AR', 'New Hampshire': 'NH', 'California': 'CA', 'New Jerse

我想把美国各州的全称形式的
文本
字符串替换为缩写形式,正如我在上面写的那样,我制作了字典

state_dict = {'Alabama' :'AL'   ,'Montana': 'MT', 'Alaska'  :'AK', 'Nebraska':  'NE', 'Arizona':    'AZ',   'Nevada':   'NV', 'Arkansas':   'AR',   'New Hampshire':    'NH', 'California': 'CA',   'New Jersey':   'NJ', 'Colorado':   'CO',   'New Mexico':   'NM', 'Connecticut': 'CT',  'New York': 'NY', 'Delaware':   'DE',   'North Carolina':   'NC', 'Florida':    'FL',   'North Dakota': 'ND', 'Georgia':    'GA',   'Ohio': 'OH', 'Hawaii': 'HI',   'Oklahoma'  :'OK', 'Idaho': 'ID',   'Oregon':   'OR', 'Illinois':   'IL',   'Pennsylvania': 'PA', 'Indiana':    'IN',   'Rhode Island': 'RI', 'Iowa':   'IA',   'South Carolina':   'SC', 'Kansas'  :'KS',  'South Dakota': 'SD', 'Kentucky':   'KY',   'Tennessee':    'TN', 'Louisiana':  'LA',   'Texas':    'TX', 'Maine':  'ME',   'Utah': 'UT', 'Maryland':   'MD',   'Vermont':  'VT', 'Massachusetts':  'MA',   'Virginia': 'VA', 'Michigan':   'MI',   'Washington':   'WA', 'Minnesota':  'MN',   'West Virginia':    'WV', 'Mississippi':    'MS',   'Wisconsin':    'WI', 'Missouri':   'MO',   'Wyoming':  'WY'}

state_list_in_full = ['Alabama' ,'Montana', 'Alaska', 'Nebraska', 'Arizona',    'Nevada', 'Arkansas',   'New Hampshire', 'California',  'New Jersey', 'Colorado',   'New Mexico', 'Connecticut',    'New York', 'Delaware', 'North Carolina', 'Florida',    'North Dakota', 'Georgia',  'Ohio', 'Hawaii',   'Oklahoma', 'Idaho',    'Oregon', 'Illinois',   'Pennsylvania', 'Indiana',  'Rhode Island', 'Iowa', 'South Carolina', 'Kansas', 'South Dakota', 'Kentucky', 'Tennessee', 'Louisiana',   'Texas', 'Maine',   'Utah', 'Maryland', 'Vermont', 'Massachusetts', 'Virginia', 'Michigan', 'Washington', 'Minnesota',  'West Virginia', 'Mississippi', 'Wisconsin', 'Missouri',    'Wyoming']
预期产出:

text = 'Suite 202, Second Floor, 1717, Montana West Northern Avenue, Phoenix, Alaska Arizona - 85021'
在哪里

我用这个试过了

Montana is replaced by MT

Alaska is replaced AK

Arizona is replaced by AZ

我知道python中str.replace的典型用法,但如何将字典键的值替换为旧字符串中的new&state字符串?

您的思路是正确的。只需在字典上循环并使用
replace
方法进行替换。在这种情况下,循环字典的一种方便方法是使用
.items()
方法,该方法返回
(键,值)
元组,您可以将这些元组分解,以便为每个项提供更好的名称

for tag in a:
    text = text.replace(old,new)

print text
请注意,这是相当简单的。它将替换每次出现的状态名称,这可能会导致错误。(如果有人住在
'123 Kentucky Ave'
?)在尝试替换之前,您可能希望将地址分解为其组成部分。最常见的方法是让用户为您单独输入,因为地址可能采用大量的格式,并且根据您手头的输入数量和地址的多样性,以编程方式将它们拆分可能很困难,甚至不可能做到正确


通过拆分地址,我的意思是,您似乎有如下内容:

In [1]: text = 'Suite 202, Second Floor, 1717, Montana West Northern Avenue, Phoenix, Alaska Arizona - 85021'

In [2]: state_dict = {'Alaska': 'AK', 'Arizona': 'AZ'}

In [3]: for state, abbrev in state_dict.items():
   ...:     text = text.replace(state, abbrev)
   ...:

In [4]: text
Out[4]: 'Suite 202, Second Floor, 1717, Montana West Northern Avenue, Phoenix, AK AZ - 85021'
address = '123 Kentucky Ave, Louisville, Kentucky, 41304'
如果您进行了上述替换,您将得到一个无效地址(
'123 KY Ave'
)。为了避免这种情况,我建议您以不同的方式进行输入,看看您是否可以得到如下结果:

In [1]: text = 'Suite 202, Second Floor, 1717, Montana West Northern Avenue, Phoenix, Alaska Arizona - 85021'

In [2]: state_dict = {'Alaska': 'AK', 'Arizona': 'AZ'}

In [3]: for state, abbrev in state_dict.items():
   ...:     text = text.replace(state, abbrev)
   ...:

In [4]: text
Out[4]: 'Suite 202, Second Floor, 1717, Montana West Northern Avenue, Phoenix, AK AZ - 85021'
address = '123 Kentucky Ave, Louisville, Kentucky, 41304'
然后,您只需在
state
上运行替换,而不是一次运行整个地址。对于多个地址,您可以有一个目录列表,如下所示:

street_address = '123 Kentucky Ave'
city = 'Louisville'
state = 'Kentucky'
ZIP_code = '41304'
那么您的替代者可能看起来像:

addresses = [{
    'street_address': '123 Kentucky Ave',
    'city': 'Louisville',
    'state': 'Kentucky',
    'ZIP_code': '41304',
}, {
    'street_address': '123 Anytown Rd',
    'city': 'Anytown',
    'state': 'OH',
    'ZIP_code': '41839',
}]
您可以尝试以下方法:

for address in addresses:
    for state, abbrev in state_dict.items():
        address['state'] = address['state'].replace(state, abbrev)

如果有人住在肯塔基大街123号,那么字典怎么会出错呢?你最终会得到一个不再是正确地址的
'123 KY Ave'
。哦,你的意思是州名可能会与地址中的其他单词发生冲突。这真的很糟糕。这就是为什么我建议将地址拆分为多个组成部分,而不是一次尝试对整个字符串进行操作的原因。