2012-12-01 56 views
1

新的一個對我來說 - 我假設這很容易,但我從來沒有使用過數組,所以我很好奇它是如何工作的。從字典創建蟒蛇數組

我有類型的字典的字典,像這樣:

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

我想將它變成一個數組,所以我可以寫入到一個CSV,然後把它變成使用R.予熱圖試圖欺騙,只是將每個嵌套的字典寫入一個單獨的行,但當然這不會工作,因爲不是每個鍵都存在於每個嵌套的字典中。簡單,對吧?

所需的輸出看起來像(以表格形式):

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

你已經把你的輸入樣本。你能舉一個想要的輸出的例子表示嗎? –

+0

當然 - 見OP。 – serilain

+0

您目前的示例輸出不顯式地解決如何處理其中一個嵌套字典中沒有密鑰的情況。你想讓我們把它的價值看作零嗎? –

回答

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

好的 - 我可以推測在這一步之前通過做 'for q,c in dictofdicts.iteritems獲得所有列的名稱():' 'coltitles.append(c.keys())' 'coltitles = list(set(coltitles))' – serilain

1

讓我們假設你有3個預定義項,如果該鍵不在字典中,可以使用字典的get函數獲取該值或默認值:

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

其他人已經回答了印刷,但假設固定標題。從字典包含列標題:

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()]