如何以表格格式打印字典?

时间:2013-11-11 22:04:08

标签: python dictionary formatting pretty-print

假设我有一本字典:

my_dict = {1:[1,2,3],4:[5,6,7],8:[9,10,11]}

我希望能够将其打印出来,如下所示:

1 4 8
1 5 9
2 6 10
3 7 11

我实际上正在处理更大的词典,如果我能看到它们的外观会很好,因为当我只是说print(my_dict)

时它们很难读

2 个答案:

答案 0 :(得分:8)

您可以使用zip()创建列:

for row in zip(*([key] + value for key, value in sorted(my_dict.items()))):
    print(*row)

演示:

>>> my_dict = {1:[1,2,3],4:[5,6,7],8:[9,10,11]}
>>> for row in zip(*([key] + value for key, value in sorted(my_dict.items()))):
...     print(*row)
... 
1 4 8
1 5 9
2 6 10
3 7 11

这个确实假设值列表的长度相等;如果不是,最短的行将确定打印的最大行数。使用itertools.zip_longest()打印更多内容:

from itertools import zip_longest
for row in zip_longest(*([key] + value for key, value in sorted(my_dict.items())), fillvalue=' '):
    print(*row)

演示:

>>> from itertools import zip_longest
>>> my_dict = {1:[1,2,3],4:[5,6,7,8],8:[9,10,11,38,99]}
>>> for row in zip_longest(*([key] + value for key, value in sorted(my_dict.items())), fillvalue=' '):
...     print(*row)
... 
1 4 8
1 5 9
2 6 10
3 7 11
  8 38
    99

您可能希望使用sep='\t'来对齐制表位上的列。

答案 1 :(得分:1)

>>> my_dict = {1:[1,2,3],4:[5,6,7],8:[9,10,11]}
>>> keys = my_dict.keys()
>>> print(*iter(keys), sep='\t')
8   1   4
>>> for v in zip(*(my_dict[k] for k in keys)): print(*v, sep='\t')
... 
9   1   5
10  2   6
11  3   7