簡體   English   中英

按順序打印字典鍵和值

[英]print dictionary keys and values in ordered manner

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

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

這些值與它們的鍵不對應,並且輸出在一行中作為一組列表給出。 如何按照我的要求格式化輸出? (“交付”和狀態之間存在空格,但堆棧溢出未顯示空格)

默認情況下不保留字典順序。 如果出於任何原因想要這樣做,則需要改用OrderedDict

值得一提的是,自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

從那里您可以處理打印格式。

您需要循環輸入,無法以單一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))

因此輸出順序是可預測的。

可以做類似的事情:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM