如何以表格形式和字母顺序打印字典?

4 python dictionary tabular python-3.4

我有一本字典,希望以表格形式打印,第一个标题为"代码",第二个标题为"名称",然后按字母顺序排序.

我目前:

 import json
 q = my_dict() #which is the dictionary
 d = json.dumps(q)
 print(d)
Run Code Online (Sandbox Code Playgroud)

输出:

"GEL": "Georgian Lari",
"BOB": "Bolivian Boliviano",
"ZAR": "South African Rand",
Run Code Online (Sandbox Code Playgroud)

这是错误的方式,我不知道如何插入列标题.按字母顺序排序也会对我有所帮助!

Name                   Code
"Bolivian Boliviano"   "BOB"
"Georgian Lari"        "GEL"
"South African Rand"   "Zar"
Run Code Online (Sandbox Code Playgroud)

这样的东西就是我正在寻找的东西.

Ada*_*ith 9

如果第三方模块是一个选项,您可以使用tabulate.

从命令行运行:

$ pip install tabulate
Run Code Online (Sandbox Code Playgroud)

然后在你的脚本中

from tabulate import tabulate

headers = ['Name', 'Code']
data = sorted([(v,k) for k,v in d.items()]) # flip the code and name and sort
print(tabulate(data, headers=headers))
Run Code Online (Sandbox Code Playgroud)

这会给你输出

Name                Code
------------------  ------
Bolivian Boliviano  BOB
Georgian Lari       GEL
South African Rand  ZAR
Run Code Online (Sandbox Code Playgroud)


xnx*_*xnx 7

我不确定您是否需要引号,但您可以按照您想要的顺序打印字典:

max_len = max([len(v) for v in d.values()])
padding = 4
for k,v in sorted(d.items(), key=lambda i:i[1]):
    print('{v:{v_len:d}s} {k:3s}'.format(v_len=max_len+padding,
                                           v=v, k=k))
Run Code Online (Sandbox Code Playgroud)

输出:

Bolivian Boliviano     BOB
Georgian Lari          GEL
South African Rand     ZAR
Run Code Online (Sandbox Code Playgroud)

key参数sorted保证了字典的数据项都受到值排序.

编辑:根据要求,使字段长度与字典值长度匹配(加上一些填充).

  • 一个非常合理的要求:编辑! (2认同)