2014-07-07 7 views
0

가 나는 SOAP 쿼리 (WSDL)의 결과를 구문 분석과 같은 배열의 배열의 결과를 얻고로 배열 요소를 사용하여 파이썬 :다차원 배열의 인덱스가

[(item){ 
    item[] = 
     (item){ 
     key[] = 
      "cdr_id", 
     value[] = 
      "201407000000000431", 
     }, 
     (item){ 
     key[] = 
      "cdr_date", 
     value[] = 
      "2014-07-07 07:47:12", 
     }, 
... (snipped for brevity - 81 items in total) 
     (item){ 
     key[] = 
      "extradata", 
     value[] = <empty> 
     }, 
}] 

을 내가 단일 값을 추출 할 필요가 특정 키에 해당합니다. 2 문제가 발생했습니다 :

  1. 키를 값으로 매핑하는 방법은 무엇입니까? (그렇지 않으면 result.item[][] 이상의 루프에 중첩됩니다.)
  2. 값을 정수로 반환하는 방법은 무엇입니까?

저는 파이썬에 매우 익숙합니다. 질문이 너무 간단하다면 사전에 미안합니다.

success_calls = client.service.selectRowset(tables[table], sfilter, None, None, None)[1] 
total_time = calls_num = 0 
for call in success_calls: 
    for key in range(len(call.item)): 
     if call.item[key][0] is "elapsed_time": 
      item_value = call.item[key][1] 
    total_time += int(item_value) 

답변

0

당신은 특정 키를 사용하여 특정 값에 액세스하는 모든 값에 대한 Dictionary을 만들 수 있습니다

내 현재 코드는 같은 비트가 보인다. 사전은 해시 테이블의 비단뱀 구현입니다. 해시 테이블 생성 중에 배열을 실행하고 모든 항목에 대해 해시 값을 계산해야하기 때문에 사전에 여러 번 액세스하려는 경우에만 의미가 있습니다. 단일 값만 추출하려는 경우 코드 예제에서 이미 수행 한 것처럼 배열을 통해 실행하는 것이 가장 좋습니다. 최악의 경우에는 복잡도가 O(n)입니다.

int("12345")을 사용하여 Python으로 String을 쉽게 구문 분석 할 수 있습니다. 그러나 조심하십시오. 문자열이 정수로 분석 할 수없는 경우이 경우 ValueError 예외가 발생할 수 있습니다. elapsed_time이 실제 숫자이고 자연스러운 것이 아니면 float("22.2123")

+0

결과가 success_calls 인 결과는 각각 14 개의 배열로 구성되며, 각 배열에는 81 개의 항목이 들어 있습니다. 나는 사전이 어떻게 작동 하는지를 이해하지 못한다면 같은 사전을 사용하는 대신 14x81 항목 이상을 반복한다. 어떤 경우에도 - 나는 파이썬이 간다면 NOOB입니다 - 나는 (success_calls)과 dict (success_calls.item)을 명심하려했지만 key, value 배열을 할당하는 방법을 알 수 없었습니다. 마지막 문제는 대답은 (적어도 item_value 프린트에서 보았 듯이) 대괄호 [] 안에 있습니다. 이것은 정수입니다.하지만 int()를 시도 할 때 대괄호 때문에 값이 없습니다. –

+0

81이 하드 와이어되어 있습니다. 항상 같은 항목이고 다른 값입니다. success_calls 수는 가변적이며 사용량이 많은 서버에서 수천 개에 도달 할 수 있습니다. –

+0

답 : 대괄호로 답한 경우 첫 번째 필드를 int() it ...로 선택하면됩니다. 따라서 : int (item_value [0]). 값처럼 보이는 또 다른 배열입니다. 방금 언급 한 내용 : 사전은 여러 번 액세스하려는 경우 유용합니다 (성능면에서). 인터프리터는 전체 배열을 실행하고 모든 단일 항목을 해시하여이를 작성해야합니다. 당신은 단지 하나의 단일 값을 추출하기를 원한다고 말했습니까? 따라서 중첩 루프를 사용하는 솔루션은 사전을 만드는 것보다 비용이 적게 듭니다. – dormux