2014-10-13 3 views
1

나는 목록이 &입니다. 리스트 L에서 모든 항목이 문자열이나하지 존재하는 경우문자열, 목록 및 사전 사용

s = "this is one sentence" 

내가 확인하려면 :

l = ['one', 'two', 'three', 'four'] 
d = {'aw.one' : '#aw.one', 'aw.two' : '#aw.two'} 

는 지금, 나는 문자열을 가지고있다. 그렇다면 키가 목록에서 해당 항목을 포함하는 사전에서 값을 가져 오려고합니다.

예를 들어, 특정 실시 예에서
- 문자열에서 '하나'는리스트 L에 존재 - 다음 I 인쇄 할 필요 #의 aw.one.

내 문자열 인 경우 :

s = "this is two balls" 

내가 그렇게 할 수있는 방법

#aw.two. 

인쇄해야?

+0

관련 : http://stackoverflow.com/questions/21718345/python-how-to-determine-if-a-list-of-word s-exist-in-a-string –

답변

1

직선 전달 방법이

for item in l: 
    if item in s: 
     for key in d: 
      if item in key: 
       print d[key] 

대신 같은, 그 중 하나는 단어가 있는지 확인하기 위해 사전 키를 반복 한 다음 목록을 반복하고 단어가 s에 있는지 확인하는 것입니다 키 접두사가 항상 동일한 경우 여러 줄에 같은를 작성, 우리는 심지어이

print ", ".join(", ".join(d[k] for k in d if i in k) for i in l if i in s) 
0

같은 것을 쓸 수 있습니다 :

>>> l = ['one', 'two', 'three', 'four'] 
>>> d = {'aw.one' : '#aw.one', 'aw.two' : '#aw.two'} 
>>> s = "this is one sentence" 
>>> print(''.join(d.get('aw.{}'.format(w)) for w in l if w in s)) 
#aw.one 
+0

접두어가 아닌 동일한 alwayz – sam

1

아마 가장 좋은 방법은 (1)

>>> import re 
>>> l = ['one', 'two', 'three', 'four'] 
>>> d = {'aw.one' : '#aw.one', 'aw.two' : '#aw.two'} 
>>> s = "this is two balls" 
>>> d_reversed = { 
...  v_part:k 
...  for k,v in d.iteritems() 
...  for v_part in re.findall(r"[\w']+", v) #for all words from every value 
...  
... } 
>>> for w in s.split(): 
...  if w in d_reversed: 
...   print d_reversed[w], d[d_reversed[w]] #print the key from the main dict, and its value 
...   break 
... 
aw.two #aw.two 
1

당신은 몇 지능형리스트와 같은 일을 달성 할 수 및 필터 람다에만 비용 O를 존재하는 경우 그렇게 찾아, 키 값의 부분이되는 딕셔너리를 구축하다 : 세트와 사전을 사용

matching_words = [ word for word in l if word in s ] 
matching_values = [ value for key, value in d.items() if list(filter(lambda x: x in key, matching_words)) ] 
for value in matching_values: 
    print(value) 
0

:

print [d['aw.'+i] for i in (set(s.split()) & set(l)) if 'aw.'+i in d]