0

我正在尝试解决这个问题:我有一些符号:

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

现在我必须将所有出现的“UK”区域转换为“GB”。我可以很容易地做到这一点:

 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))

是否可以这样做,或者有其他解决方案吗?

4

5 回答 5

2

是的!当然

ls =['RBS-UK','GOOG-US']
map(lambda x: x.replace('-UK', '-GB'), ls)
于 2013-03-21T13:50:46.130 回答
1

您实际上不必重新定义偏移量。您可以简单地替换字符串:

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

如果遇到该字符串,它将被替换,否则将完全不理会它。

于 2013-03-21T13:51:00.167 回答
1

您正在寻找一个可以使用字典的查找:

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我们用它来避免加注KeyErrorget()接受一个可选的第二个参数来返回一个值,None除非没有找到键。

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

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

于 2013-03-21T13:54:29.813 回答
0

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

这是一个生成您想要的列表的单行代码:

import re
newlist = [re.sub('UK','GB', symbol) for symbol in list]
于 2013-03-21T13:52:42.293 回答
0

如果您真的想使用 a dict,您可以使用该dict.get方法,该方法接受未找到键时使用的默认参数,因此意味着“如果存在则返回some_dict.get(x,x)与之关联的值,否则返回”:xx

>>> some_dict = {"UK": "GB"}
>>> country = "UK"
>>> some_dict.get(country, country)
'GB'
>>> country = "CA"
>>> some_dict.get(country, country)
'CA'
于 2013-03-21T13:52:55.107 回答