2013-03-21 2 views
0

Я пытаюсь решить эту проблему: У меня есть несколько символов:Python строка манипуляция без сравнения

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

Теперь я должен преобразовать все вхождения региона «Великобритания» на «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)) 

Можно ли это сделать, или есть какие-либо другие решения?

ответ

2

Да! sure

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

Вам действительно не нужно переопределять смещение. Вы можете просто заменить строку:

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

Если строка встречается она будет заменена, в противном случае он остается один полностью.

0

Вы можете использовать функцию sub от модуля re, полезного для операций регулярного выражения.

Вот один вкладыш, который производит список, который вы хотите:

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

Это могло бы выйти из-под контроля после того, как количество замен увеличилось. –

+0

Да, правильно! Я думаю, что ваше решение лучше всего здесь! :) –

0

Если вы действительно хотите использовать dict, вы можете использовать dict.get метод, который принимает аргумент по умолчанию, используемый, когда ключ ISN «т нашел, и так 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

Вы ищете поиск, для которого словарь будет им гк:

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

Хм..здесь вы снова пользуетесь сравнением .. Если перевод ... –

+0

10 Ох .. .. .. один лайнер выглядит хорошо .. Спасибо ... –

Смежные вопросы