python 實現有序字典

xie仗劍天涯發表於2017-06-08

python 實現有序字典

Python預設的字典,是不按順序儲存、輸出我們新增在字典中的內容的,即是無序的字典。python 使用OrderedDict函式實現有序的字典。

示例:

d = dict([("a",1),("b",2),("c",3),("d",5),("e",6)])
print (d)
# {'e': 6, 'c': 3, 'd': 5, 'a': 1, 'b': 2}
print (d)
# {'b': 2, 'a': 1, 'd': 5, 'c': 3, 'e': 6}

  

實現有序字典

from collections import OrderedDict
od = OrderedDict([("a",1),("b",2),("c",3),("d",5),("e",6)])
print (od)
# OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 5), ('e', 6)])
print (od)
# OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 5), ('e', 6)])

  

 

有序的字典記住它的成員插入的順序,可以使用排序函式,將其變為排序的字典

from collections import OrderedDict
d = {"banana":3,"apple":2,"pear":1,"orange":4}
od1 = OrderedDict(sorted(d.items(),key = lambda t : t[0]))
print (od1)
# OrderedDict([('apple', 2), ('banana', 3), ('orange', 4), ('pear', 1)])
od2 = OrderedDict(sorted(d.items(),key=lambda t : t[1]))
print (od2)
# OrderedDict([('pear', 1), ('apple', 2), ('banana', 3), ('orange', 4)])
od3 = OrderedDict(sorted(d.items(),key=lambda t : len(t[0])))
print (od3)
# OrderedDict([('pear', 1), ('apple', 2), ('orange', 4), ('banana', 3)])

  

模擬某競賽系統,對參賽選手程式設計解題進行計時,選手完成題目後,把該選手的解題時間記錄到字典中,以便賽後方便選手查詢成績(答題用時短,成績優秀)

"""
使用collections 模組下的 OrderedDict 函式 實現有序的字典
"""

import pprint
import time
from collections import OrderedDict
from random import randint

players = list("ABCDEFGHJK")  # 模擬10個選手
start = time.time() # 設定開始時間
d = OrderedDict()

for i in range(10):
    input("按 Enter 表示有選手完成答題:")
    p = players.pop(randint(0,9-i))
    end = time.time()
    print("%s完成答題,第%s名,用時%s"%(p,i+1,end - start))
    d[p] = (p,i+1,end-start)
pprint.pprint(d)

  

 

相關文章