我有一个包含键和值的字典,如下所示。
from datetime import datetime
dic = {'pack1':'stage1','pack2':'stage2','pack3':'stage3','pack4':'stage4'}
我想在新行中以有序的方式打印键及其对应的值,比如
更新时间:2018-09-18 09:58:03.263575
**Delivery** **State** 'pack1' 'stage1' 'pack2' 'stage2' 'pack3' 'stage3' 'pack4' 'stage4'
我试过的代码如下
print("Update at %s\nDelivery\t\t\t\t\t\t\tState \n{}\t\t\t{}".format({key for key in dic.keys()}, {val for val in dic.values()}) %datetime.now())
但它给出了输出
更新时间:2018-09-18 09:58:03.263575
**Delivery** **State** set(['pack4', 'pack1', 'pack2', 'pack3']) set(['stage1', 'stage2', 'stage3', 'stage4'])
这些值与其键不对应,输出在一行中作为一组列表给出。如何格式化输出作为我的要求? ('delivery'和State之间有空格,但堆栈溢出不显示它们)
默认情况下不保留字典顺序。如果您因任何原因需要它,那么您需要使用OrderedDict
你需要循环输入,你不能在一个format
和print
操作中干净利落地完成。
如果键只需要匹配它们的值,只需执行以下操作:
dic = {'pack1':'stage1','pack2':'stage2','pack3':'stage3','pack4':'stage4'}
for k, v in dic.items(): # .viewitems() on Python 2.7
print("{}\t\t\t{}".format(k, v))
如果您需要订购的输出,而不仅仅是匹配,dict
不会在3.7之前提供该保证(并且在3.6之前不提供甚至依赖于实现的保证)。你需要一个collections.OrderedDict
。你可以做一个预设:
for k, v in sorted(dic.items()): # .viewitems() on Python 2.7
print("{}\t\t\t{}".format(k, v))
所以输出排序是可预测的。
值得注意的是,自Python 3.7以来,dict
保留了输入数据的顺序。在此之前,您可以使用OrderedDict
。
虽然,您似乎想要按键的字母顺序对键值对进行排序。在这种情况下,您可以使用sorted
。
dic = {'pack1': 'stage1', 'pack2': 'stage2', 'pack3': 'stage3', 'pack4': 'stage4'}
for k, v in sorted(dic.items()):
print (k + '\t' + v)
pack1 stage1
pack2 stage2
pack3 stage3
pack4 stage4
从那里你可以处理打印格式。
可以这样做:
dic = {'pack1':'stage1','pack2':'stage2','pack3':'stage3','pack4':'stage4'}
print('Delivery\t\tState')
for i in dic.items():
print(('\t'*3).join(i))
字典不是在python 3.6下订购的,所以OrderdDict
:
from collections import OrderedDict
dic = OrderedDict([('pack1', 'stage1'), ('pack2', 'stage2'), ('pack3', 'stage3'), ('pack4', 'stage4')])
print('Delivery\t\tState')
for i in dic.items():
print(('\t'*3).join(i))
所有输出:
Delivery State
pack1 stage1
pack2 stage2
pack3 stage3
pack4 stage4