1

次のコードがあります。

dic = {'key1': [0, 0, 0], 'key2': [1, 1, 1], 'key3': [2, 2, 2]}

keys = dic.keys()
values = dic.values()

for i in range(0, len(keys)):
    print keys[i]
    for j in range(0, len(values)):
        print values[i][j]

生成される出力は次のとおりです。

key3
2
2
2
key2
1
1
1
key1
0
0
0

私がしたいのは、次の出力です。

key3 key2 key1
2    1    0
2    1    0
2    1    0

どうもありがとう!

4

6 に答える 6

2

すべての値のリストが同じ長さkeysで、ヘッダーに必要な順序があると仮定すると、次のようになります。

print '\t'.join(keys)
for row in zip(*[dic[k] for k in keys]):
    print '\t'.join(map(str, row))

アップデート

順序を保証するためにリスト内包表記を使用しましたが、Pythonのドキュメントによると、dict.keys() と dict.values() の順序は、辞書が途中で変更されていない場合に保証されます。それを考慮すると、上記のリスト内包表記は削除でき、コードは次のように単純になります。

print '\t'.join(keys)
for row in zip(*values):
    print '\t'.join(map(str, row))
于 2013-11-11T15:49:24.597 に答える
0

次のようなことができます。

dic = {'key1': [0, 0, 0], 'key2': [1, 1, 1], 'key3': [2, 2, 22222]}

def printTable (tbl, borderHorizontal = '-', borderVertical = '|', borderCross = '+'):
    cols = [list(x) for x in zip(*tbl)]
    lengths = [max(map(len, map(str, col))) for col in cols]
    f = borderVertical + borderVertical.join(' {:>%d} ' % l for l in lengths) + borderVertical
    s = borderCross + borderCross.join(borderHorizontal * (l+2) for l in lengths) + borderCross

    print(s)
    for row in tbl:
        print(f.format(*row))
        print(s)

sorted_keys=sorted(dic.keys(),reverse=True)
table=[sorted_keys]
for row in zip(*[dic[k] for k in sorted_keys]):
    table.append(list(row))

printTable(table) 

版画

+-------+------+------+
|  key3 | key2 | key1 |
+-------+------+------+
|     2 |    1 |    0 |
+-------+------+------+
|     2 |    1 |    0 |
+-------+------+------+
| 22222 |    1 |    0 |
+-------+------+------+
于 2013-11-11T16:00:38.950 に答える
0

ループを次のように並べ替えます。

for i in range(len(keys)):
    print keys[i],
print
for line in range(len(values)):
    for column in range(len(keys)):
        print values[column][line], '  ',#change the number of spaces to get the right fit
    print
于 2013-11-11T15:50:08.447 に答える
0

これでできます。

dic = {'key1': [0, 0, 0], 'key2': [1, 1, 1], 'key3': [2, 2, 2]}

keys = sorted(dic.keys(), reverse=True)
values = [map(str, dic[k]) for k in keys]

print '\t'.join(keys)
print '\n'.join(['\t'.join(v) for v in zip(*values)])

出力:

>>> 
key3    key2    key1
2       1       0
2       1       0
2       1       0
于 2013-11-11T16:03:05.167 に答える