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)
这样的东西就是我正在寻找的东西.
如果第三方模块是一个选项,您可以使用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)
我不确定您是否需要引号,但您可以按照您想要的顺序打印字典:
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保证了字典的数据项都受到值排序.
编辑:根据要求,使字段长度与字典值长度匹配(加上一些填充).