1

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

我有一个字典,像这样:

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

我想把它变成一个数组,这样我就可以把它写成一个 CSV,然后用 R 把它变成一个热图。我试图作弊,只是把每个嵌套的 dict 写到一个单独的行,但当然不会t 工作,因为不是每个键都存在于每个嵌套的字典中。很简单,对吧?

所需的输出看起来像(以表格形式):

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

3 回答 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])
于 2012-12-01T22:24:28.160 回答
1

假设您有 3 个预定义键,您可以使用 dict 的 get 函数来获取值,如果键不在 dict 中,则可以使用默认值:

headers = ('a', 'b', 'c')
for key, values in dict.item():
     print ','.join([values.get(h, '') for h in headers])
于 2012-12-01T22:26:03.123 回答
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()]
于 2012-12-01T22:34:29.707 回答