2015-01-27 2 views
-1

그래서 나는이 같은 목록이 각 엔티티의 확률로 사전에 각 엔티티의 앞에변환 목록

['2 ROOT S . ', '1 ROOT S ! ', '1 ROOT is it true that S ? ', '1 S NP VP ', '1 VP Verb NP ', '1 NP DT Noun ', '1 NP NP PP ', '1 PP Prep NP ', '1 Noun Adj Noun ', '1 Verb ate ', '2 Verb wanted ', '1 Verb kissed ', '3 Verb understood ', '1 Verb pickled ', '2 DT the ', '1 DT a ', '1 DT every ', '1 Noun president ', '2 Noun sandwich ', '1 Noun pickle ', '3 Noun chief of staff ', '1 Noun floor ', '1 Adj fine ', '2 Adj delicious ', '1 Adj perplexed ', '3 Adj pickled ', '2 Prep with ', '1 Prep on ', '1 Prep under ', '3 Prep in '] 

숫자를 확률, 다음 문자열은 사전의 키이고, 나머지 문자열은 해당 특정 문자열의 값입니다. 내가해야 할 일은 목록의 각 엔티티를 추출하여 사전에 입력하는 것입니다. 처음 세에 대한 예를 들어 내가 이렇게 보이는 사전을 만들어야합니다

dict = { 
'ROOT': [['2/4'], ['1/4'], ['1/4'], ['S', '.'], ['S', '!'], ['is', 'it', 'true', 'that', 'S', '?']] 
} 

ROOT가 핵심의 처음 세 값은 무작위로 뽑힐 것이다 마지막 세 값의 확률입니다. 아마도 사전을 구조화하는 더 좋은 방법이 있을지 모르겠지만 저는 파이썬에 대해 상당히 새로운 것입니다. 그래서 나는이 모든 것을 제가 선택하는 것입니다.

가능한 경우 중첩 된 사전 일종의 가능성이 있습니까? 감사합니다.

+0

왜 빈 문자열이 목록에 있습니까? 그들의 목적은 무엇입니까? – Eithos

+0

텍스트 파일에서 목록을 만드는 중, 빈 문자열을 만드는 이유를 모르지만 무시할 수 있습니다. – pnizi

+0

@Eithos는 걱정할 필요가 없습니다. 프로그램하기 전에 프로그램을 실행하기 전에 'list = [item if list! =' '] 항목을 호출하십시오. –

답변

0

아무도이 사진을 제공하지 않습니다. 다음 코드는 설명 된 예제와 정확히 일치하지 않지만 내 의견으로는 데이터를 표현하는 더 좋은 방법입니다.

probabilityDict = {} 
for i in valueList: 
    if i != ' ' : 
     y = i.split() 
     typeKey = y[1] 
     probabilityKey = y[0] + '/4' 

     if typeKey not in probabilityDict: 
      probabilityDict[typeKey] = {} 

     if probabilityKey not in probabilityDict[typeKey]: 
      probabilityDict[typeKey][probabilityKey] = [] 

     probabilityDict[typeKey][probabilityKey].extend(y[2:]) 

출력하여 예에서

print probabilityDict 

    {'ROOT': {'1/4': ['S', '!', 'is', 'it', 'true', 'that', 'S', '?'], '2/4': ['S', '.']}, 
    'Adj': {'1/4': ['fine', 'perplexed'], '2/4': ['delicious'], '3/4': ['pickled']}, 
    # etc... } 

'1/4'이 반복되었다. 여기에서 주어진 확률과 일치하는 모든 값을 유지하기 위해 키가 병합 된 것을 볼 수 있습니다. 이 방법으로 병합하면 나중에 중첩 된 사전으로 사용할 수 있다는 장점이 있습니다. 예를 들어

:

print probabilityDict['ROOT']['1/4'] 
>>> ['S', '!', 'is', 'it', 'true', 'that', 'S', '?'] 

난 당신이 여기에서 갈 계획 위치를 알고 있지만 마음에 당신을 도울 수있는 몇 가지 유용한 dict 방법을 보관하지 않습니다. 반복자는 (즉이 for loops에서 사용) 얻기 위해 사용

# On Python 2x 
probabilityDict['Root'].iterkeys() 
probabilityDict['Root'].itervalues() 
probabilityDict['Root'].iteritems() 

# On Python 3x 
probabilityDict['Root'].keys() 
probabilityDict['Root'].values() 
probabilityDict['Root'].items() 

을 그리고 마음 사전에 두어야하는 것은 정렬되지 않은 데이터입니다. 나머지 코드와 함께 이것을 고려해야합니다.