2012-12-01 5 views
1

새로운 기능 -이 방법은 상당히 쉽지만 이전에 배열로 작업 한 적이 없으므로 어떻게 작동하는지 궁금합니다.dicts의 dict에서 파이썬 배열을 작성하십시오

그래서 같은 dicts의 DICT이 : 나는 CSV에 기록하고 R. I을 사용하여 히트 맵으로 바꿀 수

{'bob': {'a':1, 'b':2, ...}, 'joe': {'a':2, 'c':3, ...} ...} 

내가 배열로 돌려 싶습니다 속임수를 사용하여 각각의 중첩 된 dict을 개별 행에 씁니다. 그러나 모든 중첩 된 dict에 모든 키가 존재하지 않기 때문에 물론 작동하지 않습니다. 간단 하죠?

원하는 출력 (테이블 형식)과 같습니다

,a,b,c 
bob,1,2,0 
joe,2,0,3 
+2

입력 한 견본을 넣었습니다. 원하는 출력의 예를 들어 줄 수 있습니까? –

+0

~ OP를 참조하십시오. – serilain

+0

샘플 출력은 현재 중첩 된 사전 중 하나에서 키가없는 경우를 처리하는 방법을 명시 적으로 * 다루지 않습니다. 우리가 그 가치를 0으로 취급하기를 원하십니까? –

답변

3

당신의 열이 고정되어있는 경우, 당신은 단순히 같은 것을 할 수있는 :의 당신이 3 미리 정의 된 키가 가정하자

cols = ['a', 'b', 'c'] 
csv.writerow([''] + cols) 
for name, values in data.iteritems(): 
    csv.writerow([name] + [values.get(c, 0) for c in cols]) 
+0

+1 - [csv.DictWriter'] (http : //docs.python .org/2/library/csv.html # csv.DictWriter)를 stdlib –

+0

에서 가져 오면 알 수 있습니다.이 단계 이전에 모든 열의 이름을 아마도 dictofdicts.iteritems의 q에 대해 '() :' 'coltitles.append (c.keys())' 'coltitles = list (set (coltitles))' – serilain

1

을, dict의 get 함수를 사용하여 값을 가져 오거나 키가 dict에없는 경우 기본 값을 사용할 수 있습니다.

headers = ('a', 'b', 'c') 
for key, values in dict.item(): 
    print ','.join([values.get(h, '') for h in headers]) 
1

다른 사람들은 이미 인쇄에 응답했지만 고정 헤더를 가정합니다. DICT에서 열 머리글을 얻으려면 : 또는, 더 자세하게

columns = sorted(set(column for subdict in dict_of_dicts.itervalues() for column in subdict)) 

을 :

column_set = set() 
for subdict in dict_of_dicts.itervalues(): 
    for column in subdict: 
    column_set.add(column) 
columns = sorted(column_set) 

그냥 재미를 위해, 하나의 긴 줄에 배열을 만들려면 권장하지 :

array = [[''] + columns] + [[key] + [subdict.get(column, 0) for column in columns] for key, subdict in dict_of_dicts.iteritems()] 
관련 문제