【问题标题】:create python array from dict of dicts从字典的字典创建python数组
【发布时间】:2012-12-01 22:15:52
【问题描述】:

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

我有一个字典,像这样:

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

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

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

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

【问题讨论】:

  • 您已经输入了输入样本。你能给出所需输出的示例表示吗?
  • 您目前的示例输出没有明确解决如何处理嵌套字典之一中缺少键的情况。您希望我们将其值视为零吗?
  • 是的,请。抱歉,不清楚。
  • 查看python csv库:csv

标签: python arrays dictionary


【解决方案1】:

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

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 - 标准库中还有csv.DictWriter
  • 好的——我大概可以在这一步之前通过for q,c in dictofdicts.iteritems():coltitles.append(c.keys())coltitles = list(set(coltitles))得到所有列的名称
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-10-02
      • 2016-11-20
      • 2021-06-25
      • 2017-05-05
      • 2016-07-11
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      相关资源
      最近更新 更多