按顺序打印字典键和值

时间:2018-09-18 04:44:19

标签: python

我有一本包含键和值的字典,如下所示。

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'])

这些值与它们的键不对应,并且输出在一行中作为一组列表给出。如何按照我的要求格式化输出? (“交付”和“状态”之间有空格,但是堆栈溢出未显示空格)

4 个答案:

答案 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)

您需要遍历输入,无法通过一次formatprint操作来做到这一点。

如果键只需要匹配它们的值,请执行以下操作:

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