[英]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
從那里您可以處理打印格式。
您需要循環輸入,無法以單一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))
因此輸出順序是可預測的。
可以做類似的事情:
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.