首页 > 解决方案 > 如何从字典中打印出格式良好的表格

问题描述

为了练习如何更舒适和流利地使用字典,我编写了一个小程序,它读取文件的内容并将其作为键:值对添加到字典中。这没问题,但是当我对如何使用 for 循环以与数据文件中的表格相同的格式再次打印内容感到好奇时,我遇到了麻烦。

我的问题是:如何使用 for 循环将字典的内容打印到终端上?

数据文件是:

Name    Age     School
Anne    10      Eiksmarka
Tom     15      Marienlyst
Vidar   18      Persbråten
Ayla    18      Kongshavn
Johanne 17      Wang
Silje   16      Eikeli
Per     19      UiO
Ali     25      NTNU

我的代码是:

infile = open("table.dat", "r")
data = {}

headers = infile.readline().split()
for i in range(len(headers)):
    data[headers[i]] = []

for line in infile:
    words = line.split()
    for i in range(len(headers)):
        data[headers[i]].append(words[i])
infile.close()

我希望将数据打印回终端。理想情况下,输出应该是这样的

Name    Age     School
Anne    10      Eiksmarka
Tom     15      Marienlyst
Vidar   18      Persbråten
Ayla    18      Kongshavn
Johanne 17      Wang
Silje   16      Eikeli
Per     19      UiO
Ali     25      NTNU

如果有人可以帮助我,我将不胜感激。

标签: pythondictionaryfor-loopionested-loops

解决方案


最简单的解决方案是使用诸如 之类的库Tabulate,您可以在此处找到输出示例(您可以进一步自定义)

>>> from tabulate import tabulate

>>> table = [["Sun",696000,1989100000],["Earth",6371,5973.6],
...          ["Moon",1737,73.5],["Mars",3390,641.85]]
>>> print(tabulate(table))
-----  ------  -------------
Sun    696000     1.9891e+09
Earth    6371  5973.6
Moon     1737    73.5
Mars     3390   641.85
-----  ------  -------------

否则,如果您必须使用自己的自定义 for 循环,您可以添加选项卡来修复它的外观,如下所示:

print(a+"\t")其中 \t 是水平制表转义字符

编辑:如何使用它的示例如下:

infile = open("table.dat", "r")
data = {}

headers = infile.readline().split()
for i in range(len(headers)):
    data[headers[i]] = []

for line in infile:
    words = line.split()
    for i in range(len(headers)):
        data[headers[i]].append(words[i])
        print(words[i],end= '\t')
    print()
infile.close()

注意事项:

1- 对于每个字段,我们使用 print(...,end= '\t'),这会导致输出成为制表符而不是新行,我们也可以考虑添加更多制表符(例如end='\t\t')或空格,或者任何其他格式,例如分隔符(例如 `end='\t|\t')

2- 在每一行之后,我们使用 print(),这只会打印一个新行,向下移动打印光标。


推荐阅读