从dicts的dict创建python数组

时间:2012-12-01 22:15:53

标签: python arrays dictionary

对我来说是新的 - 我假设这很容易,但我之前从未使用过数组,所以我很好奇它是如何工作的。

我有一个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

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