从dicts的dict创建python数组

2024-04-28 10:51:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一段口头禅,就像这样:

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

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

期望输出如下(以表格形式):

^{pr2}$

Tags: csv数组dict形式表格作弊bob热图
3条回答

其他人已经回答了打印问题,但假设标题是固定的。要从dict获取列标题:

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

或者,更详细地说:

^{pr2}$

要在一条长线中创建阵列,只是为了好玩,不建议:

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

如果列是固定的,您可以简单地执行以下操作:

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

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

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

相关问题 更多 >