2014-02-23 3 views
1

У меня есть словарь: -Сравнение и замена элементов списка

dict= { 'b' : 'bob' , 'c' : 'code' , 'd' : 'do'} 
import re 
def convert(str) 
data=list(str.replace(' ','')) 
for dat in data 
print dat 
# this gives an output as 
# b 
# c 
# d 
# Here I want to compare each character(b,c,d) with the key in my dict{} dictionary 
# and if there is a match(dict has 'b':'bob') then I want to replace the character with the 
# dictionary value. 
# In summary i want to convert string bcd to bobcodedo. 


if __name__== "__main__": 
sam('bcd') 

В заключение я хочу, чтобы преобразовать строку в BCD bobcodedo.

ответ

3

Не называйте ваш dictionarydict, stringstr и т.д.

In [12]: 

D={ 'b' : 'bob' , 'c' : 'code' , 'd' : 'do'} 
S='bcd' 
In [13]: 

''.join(map(D.get,S)) 
Out[13]: 
'bobcodedo' 

Чтобы развернуть его на свой второй вопрос:

In [15]: 

''.join(map(lambda x: D.get(x, ''),'bcdefg')) 
Out[15]: 
'bobcodedo' 
In [16]: 

''.join(map(lambda x: D.get(x, x),'bcdefg')) 
Out[16]: 
'bobcodedoefg' 

Чтобы ответить на этот вопрос в свой комментарий:

In [12]: 

bad_str='|xyz' 
in_str1='acdefggt' 
in_str2='asxsttgm' 
In [13]: 

set(bad_str).intersection(in_str2) 
Out[13]: 
{'x'} 
In [14]: 

if len(set(bad_str).intersection(in_str1))==0: 
    print 'do someting' 
else: 
    print 'Abort!' 
do someting 
+0

+10086 для 'map';) – zhangxaochen

+0

Th anks !! Но это не работает, если у меня есть строка s = 'bcdefg', так как я не хочу определять e, f, g в моем словаре. Как изменить только bcd и сохранить efg как то же самое? – NBA

+0

Оцените это, Кроме того, что, если я хочу бросить ошибку, когда я нахожу, что персонаж говорит «|» между моей строкой = 'bcd | efg'. В этой строке, когда я нахожу '|' Я хочу отправить сообщение об исключении - «Остановить парсинг». Как это можно достичь? Следует ли здесь использовать reg ex? – NBA

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