2012-11-20 2 views
1
def reportCSV(t): 
    ret = '' 
    for ev in t: 
     for p in t[ev]: 
      for w in t[ev][p]: 
       ret += ','.join((ev, p, w, t[ev][p][w])) + '\n' 
    return ret 

이 작업을 수행하기위한 좀 더 파이썬적인 방법은 무엇입니까? itertools 등을 사용합니까?Pythonic/itertools 방식으로 사전을 살펴 보시겠습니까?

이 경우 저는 CSV 파일로 작성하고 있습니다. t는 딕셔너리입니다 t [EV]입니다 DICT t [EV] [P]는 딕셔너리에게 있습니다 t [EV] [P] 부동

입니다 [W]가 내가 '방법을 잘 모르겠어요 이 경우 itertools.product를 사용하십시오.

+1

'itertools.product' 일 수 있습니다. –

+3

't.keys()'에있는 ev에 대해서'for ev in t'에 대해서 – mata

+1

조금 혼란 스럽네요, 당신의 어휘의 구조는 무엇입니까? –

답변

4

당신은 다시 작성할 수 있습니다 무엇 :

def reportCSV(t): 
    result = [] 
    for t_key, t_value in t.iteritems(): 
     for p_key, p_value in t_value.iteritems(): 
      for w_key, w_value in p_value.iteritems(): 
       row_data = t_key, p_key, w_key, w_value 
       result.append(','.join(row_data)) 
    return '\n'.join(result) 

이 작업을 수행 할 필요성을 제거 iteritems()을 사용하기 때문에 그것을 연결로 다수를 수행하는 대신 함께 문자열을 결합하기 때문에 더 빨리, 그리고 더 효율적인 것 추가 사전 조회 또는 중개자 목록 만들기.

+0

그렇습니다.이 경우 정확한 접근 방법이 될 것입니다. 이러한 유형의 프로세스를 여러 번 수행하는 경우 (keyA, keyB, keyC, value)를 추출하는 도우미 함수를 작성하고 코드를 훨씬 더 단순하게 만들 수는 있습니다 읽을 수있는. 동적 인 깊이를 원한다면 재귀 적 도우미 기능이 필수적입니다. –

관련 문제