以有序的方式打印字典键和值

问题描述 投票:1回答:4

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

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之间有空格,但堆栈溢出不显示它们)

python
4个回答
0
投票

默认情况下不保留字典顺序。如果您因任何原因需要它,那么您需要使用OrderedDict


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

所以输出排序是可预测的。


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

从那里你可以处理打印格式。


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
© www.soinside.com 2019 - 2024. All rights reserved.