从dict of dict创建python数组

从dict of dict创建python数组,python,arrays,dictionary,Python,Arrays,Dictionary,对我来说是新的——我假设这相当容易,但我以前从未使用过数组,所以我很好奇它是如何工作的 我有一份口述,就像这样: {'bob': {'a':1, 'b':2, ...}, 'joe': {'a':2, 'c':3, ...} ...} 我想把它变成一个数组,这样我就可以把它写进CSV,然后用R把它变成一个热图。我试图作弊,只是把每个嵌套的dict写到一行,但这当然行不通,因为不是每个嵌套的dict中都有键。很简单,对吧 所需的输出如下(以表格形式): 如果列是固定的,您可以简单地执行以下操作:

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

我有一份口述,就像这样:

{'bob': {'a':1, 'b':2, ...}, 'joe': {'a':2, 'c':3, ...} ...}
我想把它变成一个数组,这样我就可以把它写进CSV,然后用R把它变成一个热图。我试图作弊,只是把每个嵌套的dict写到一行,但这当然行不通,因为不是每个嵌套的dict中都有键。很简单,对吧

所需的输出如下(以表格形式):


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

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

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

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])
columns = sorted(set(column for subdict in dict_of_dicts.itervalues() for column in subdict))

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

headers = ('a', 'b', 'c')
for key, values in dict.item():
     print ','.join([values.get(h, '') for h in headers])
columns = sorted(set(column for subdict in dict_of_dicts.itervalues() for column in subdict))

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

headers = ('a', 'b', 'c')
for key, values in dict.item():
     print ','.join([values.get(h, '') for h in headers])
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()]

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

headers = ('a', 'b', 'c')
for key, values in dict.item():
     print ','.join([values.get(h, '') for h in headers])
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()]

您已经输入了一个示例。您能给出所需输出的示例表示吗?您的示例输出目前没有明确说明如何处理其中一个嵌套字典中缺少键的情况。你想让我们把它的值当作零吗?是的,请。很抱歉不够清晰。请参阅python csv库:您已经输入了一个示例。您能给出所需输出的示例表示吗?您的示例输出目前没有明确说明如何处理其中一个嵌套字典中缺少键的情况。你想让我们把它的值当作零吗?是的,请。很抱歉不够清晰。请参阅python csv库:+1-还有来自stdlibok的内容-我可以通过在dictofdicts.iteritems()中对q,c执行
coltitles.append(c.keys())
coltitles=list(set(coltitles))
+1-还有来自stdliboke的信息——我可以通过在dictofdicts.iteritems()中对q,c执行
操作来推测在这一步之前所有列的名称:
coltitles.append(c.keys())
coltitles=list(set(coltitles))