2014-12-05 3 views
1

다음 유형의 Pyparsing 표현식을 사용하고 있습니다.Pyparsing의 중첩 된 사전 Parseresults

pp.SkipTo(common_cfg)('value 2') + common_cfg + pp.SkipTo(pp.LineEnd()) 

common_cfg는 결과에 '값 1'을 할당하는 표현식입니다.

asDict() 구문 분석 할 때 중첩 된 사전이 나타납니다. 왜 그런 일이 일어나고 어떻게 해결할 수 있습니까? "값 2"의 경우 빈 문자열 만 있으면됩니다.

{'value 1': '52D4B6ED', 'value 2': ([''], {})} 
+1

입력 문자열,'common_cfg'의 정의,'pp'가 나오는 부분 및 재생산에 필요한 다른 세부 사항을 포함하여 이것을 완벽하게 재현하는 코드 샘플을 제공해주십시오. REPL에서 복사/붙여 넣기를 수행하면 충분할 수 있습니다 (지나치게 길지 않은 경우). – jpmc26

+0

common_cfg는 코드에 의해 자동 생성되므로 약간 관련이 있습니다. 반환 된 중첩 된 사전의 의미가 무엇인지 알고 싶었습니다. – jazzblue

+1

'common_cfg'가 복잡해지면 예제를 줄이면 * 제거 할 수있는 좋은 예가 될 것입니다. 특정 정의를 선택하여 질문에 넣으면이를 재현 할 수 있습니다. 나는 당신이 elightening을 찾을 것 : http://sscce.org/. 원래 내가 글을 읽었을 때 가장 큰 문제 중 하나는 내가 어디에서 결과를 얻었는지 말할 수 없다는 것입니다. 당신이 받아 들인 답은 몇 가지 일이 올바른 추측이었습니다. 당신이'repr'을보고있는 것은 그들 중 하나입니다. 그럼에도 불구하고, 나는 당신이 당신의 대답을 가지고있어서 다행입니다. 행복한 코딩. – jpmc26

답변

2

"값 2"에 표시되는 값은 중첩 된 사전이 아닙니다. 단일 항목, 빈 문자열을 포함하는 ParseResults 개체를 가져 오는 중입니다. ParseResults는 목록과 dict의 특성을 모두 가지고 있기 때문에 repr 문자열은 구문 분석 된 문자열 또는 객체의 목록과 이름이 지정된 결과 및 그 값의 사전 목록과 같은 두 가지를 모두 표시합니다. 이것을 보시려면 type(result["value 2"])을 인쇄 하시거나 result["value 2"].dump()을보십시오.

당신은 사용하여 "그룹 해제"를 SkipTo 결과로 어느 정도 성공을 가질 수있다 :

pp.ungroup(pp.SkipTo(common_cfg)('value 2')) 

을 파서의 첫 번째 임기.

+0

위대한 설명, 고마워! – jazzblue

관련 문제