1

私にとっては新しいものです-これはかなり簡単だと思いますが、これまで配列を使ったことがないので、どのように機能するのか興味があります。

私は次のように口述の口述を持っています:

{'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
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)

配列を 1 つの長い行で作成するには、楽しみのために、お勧めしません。

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 に答える