我有一本包含键和值的字典,如下所示。
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'])
这些值与它们的键不对应,并且输出在一行中作为一组列表给出。如何按照我的要求格式化输出? (“交付”和“状态”之间有空格,但是堆栈溢出未显示空格)
答案 0 :(得分:0)
默认情况下不保留字典顺序。如果出于任何原因想要这样做,则需要改用OrderedDict
答案 1 :(得分:0)
请注意,自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
从那里您可以处理打印格式。
答案 2 :(得分:0)
您需要遍历输入,无法通过一次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))
所以输出顺序是可以预测的。
答案 3 :(得分:0)
可以执行以下操作:
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