我有一个dicts的词典,就像这样:
{'bob': {'a':1, 'b':2, ...}, 'joe': {'a':2, 'c':3, ...} ...}
我想把它变成一个数组,这样我就可以把它写成一个CSV然后用R转换成热图。我试图欺骗并把每个嵌套的dict写成一行,当然这是行不通的,因为并非每个嵌套的dict中都存在每个键。简单,对吧?
所需的输出看起来像(以表格形式):
,a,b,c
bob,1,2,0
joe,2,0,3
答案 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])
答案 1 :(得分:1)
假设您有3个预定义的键,您可以使用dict的get函数来获取值,如果键不在dict中,则可以使用默认值:
headers = ('a', 'b', 'c')
for key, values in dict.item():
print ','.join([values.get(h, '') for h in headers])
答案 2 :(得分: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()]