2013-05-16 6 views
0

목록에 구분 기호 이전과 이후 가변 길이의 다중 문자열 값을 추출 그것에서 두 개의 데이터 구조 :나는 다음과 같은 형식의 여러 파이썬 목록이

  1. 콜론 (:)
  2. 콜론 (:)
  3. 전에 반복되는 텍스트가있는 문자열 변수 후 나타나는 이름의 목록

이상적으로 두 항목의 이름은 원래 목록 이름을 기준으로 지정됩니다. 또한 구분 기호와 그 뒤에 오는 첫 번째 공백은 무시되어야합니다.

위의 두 예는

원하는 샘플 출력 : I는 각 목록 항목에서 고정 된 문자열을 제거하여 하나의 목록이 일을 할 수있었습니다,하지만 확실히 파악하지 않은

rating_names = ['Bob', 'Alice', 'Mary Jane'] 
rating_text = 'What is your rating for?' 

opinion_names = ['Bob', 'Alice', 'Mary Jane'] 
opinion_text = 'What is your opinion of?' 

구분 기호 앞에 다양한 문자 수와 두 단어 이름 (예 : 'Mary Jane')의 잠재력이있는 경우이를 작동시키는 방법. 검색 한 후

rating_names = ([s.replace('What is your rating for?': ','') for s in rating]) 

,보기 미리 (1, 2)과 같은 정규 표현식이 해결책이 될 수 있음을 나타납니다,하지만 그 중 하나, 동작하지 않습니다.

답변

1

사용 str.split() :

>>> 'What is your rating for?: Bob'.split(': ') 
['What is your rating for?', 'Bob'] 

얻을 수있는 텍스트와 이름 :

>>> def get_text_name(arg): 
...  temp = [x.split(': ') for x in arg] 
...  return temp[0][0], [t[1] for t in temp] 
... 
>>> rating_text, rating_names = get_text_name(rating) 
>>> rating_text 
'What is your rating for?' 
>>> rating_names 
['Bob', 'Alice', 'Mary Jane'] 

(여기에서 말한대로 당신은 아마 "DICT"을 의미) "변수"얻을 :

>>> def get_text_name(arg): 
...  temp = [x.split(': ') for x in arg] 
...  return temp[0][0].split()[-2], [t[1] for t in temp] 
... 
>>> text_to_name=dict([get_text_name(x) for x in [rating, opinion]]) 
>>> text_to_name 
{'rating': ['Bob', 'Alice', 'Mary Jane'], 'opinion': ['Bob', 'Alice', 'Mary Jane']} 
+0

감사합니다. Elazar. 함수에 대한 입력을 기반으로 _text 및 _names 변수를 동적으로 생성하는 것에 대한 제안 사항은 무엇입니까? –

1
import re 
def gr(l): 
    dq, ds = dict(), dict() 
    for t in l: 
     for q,s in re.findall("(.*\?)\s*:\s*(.*)$", t): dq[q] = ds[s] = 1 
    return dq.keys(), ds.keys() 

l = [ gr(rating), gr(opinion) ] 
print l 
+0

왜'set'을 사용하지 않습니까? – Elazar

0

많은 수의 목록을 처리하기 위해 데이터를 사전에 직접 입력하는 것이 좋습니다. 이렇게하면 Elazar에게 질문 할 수 있습니다.

코드

def dict_gen(d, l): 
    for s in l: 
     question, name = s.split(': ') 
     if question not in d: 
      d[question] = []  
     d[question].append(name) 

사용

rating = ['What is your rating for?: Bob', 'What is your rating for?: Alice', 'What is your rating for?: Mary Jane'] 
opinion = ['What is your opinion of?: Bob', 'What is your opinion of?: Alice', 'What is your opinion of?: Mary Jane'] 

results = {} 
dict_gen(results, rating) 
dict_gen(results, opinion) 

for key, value in results.items(): 
    print key, value 

귀하의 평가가 무엇를 얻을? [ 'Bob', 'Alice', 'Mary Jane']
당신의 의견은 무엇입니까? [ 'Bob', 'Alice', 'Mary Jane']

관련 문제