2013-03-21 147 views
0

我试图解决这个问题,Python的字符串操作:我有一些符号:没有比较

list =["RBS-UK", "GOOG-US"] 

现在我要改造“英国”到“国标”的所有区域发生。我可以很容易地做到这一点:

new_list =[] 
for symbol in list : 
    temp_list=symbol.split("-") 
    if temp_list[1]=="UK": 
     temp_list[1]="GB" 
    new_list.append("-".join(temp_list)) 

但我可以做这个没有平等的比较吗?

我要找的线沿线的东西:

some_dict={} 
new_list =[] 
for symbol in list : 
    temp_list=symbol.split("-") 
    temp_list[1]=some_dict(temp_list[1]) # So this dict returns GB if its UK else returns same value as it is 
    new_list.append("-".join(temp_list)) 

是否有可能做到这一点,还是有什么其他的解决方案?

回答

2

是啊!当然

ls =['RBS-UK','GOOG-US'] 
map(lambda x: x.replace('-UK', '-GB'), ls) 
1

你实际上并不需要重新定义偏移量。你可以简单地替换字符串:

for symbol in list: 
    symbol = symbol.replace('-UK','-GB') 

如果字符串遇到它会被替换,否则单独完全留给。

0

您可以使用re模块中的sub函数,该函数对正则表达式操作很有用。

这里是一个班轮产生的列表中选择所需:

import re 
newlist = [re.sub('UK','GB', symbol) for symbol in list] 
+0

一旦更换次数增加,这将失控。 – 2013-03-21 15:51:17

+0

是的,对!我认为你的解决方案是最棒的! :) – 2013-03-21 16:10:14

0

如果你真的想用一个dict,您可以使用dict.get方法,它接受使用默认参数时,关键ISN “T找到,所以some_dict.get(x,x)的意思是‘返回与如果存在x关联的值,否则返回x’:

>>> some_dict = {"UK": "GB"} 
>>> country = "UK" 
>>> some_dict.get(country, country) 
'GB' 
>>> country = "CA" 
>>> some_dict.get(country, country) 
'CA' 
1

你正在寻找一个查询,为此,词典将禾RK:

translations = {'UK':'GB'} # and so on 
for symbol in lst: 
    country_code = symbol.split('-')[1] 
    translated = translations.get(country_code,country_code) 
    new_list.append('{}-{}'.format(symbol.split('-')[0],translated)) 

关键行是:

translated = translations.get(country_code,country_code) 

字典有一种方法get()将返回None如果密钥是找不到的。我们用这个来避免提高KeyError。如果未找到密钥,get()将为可返回的值返回非None的可选第二个参数。

在上面的代码片段中,我们将国家代码传递给get(),并要求它在没有可用翻译的情况下返回相同的国家代码,否则返回翻译。

第二行使用字符串格式来重建带有翻译后代码的原始符号并将其附加到您的列表中。

+0

嗯..在这里你再次使用比较..如果翻译... – 2013-03-21 13:57:49

+0

哦..yeah ..一个班轮看起来不错..谢谢... – 2013-03-21 14:01:18