如何讓字典保持有序

實際案例

某編程競賽系統(tǒng),對參賽選手編程解題進行計時,選手完成題目后,把該選手解題用時記錄到字典中,以便賽后按選手名查詢成績。(答題用時越短,成績越優(yōu)。)如:
{'Li':(1, 29), 'Jim':(3, 36), 'Jack':(2, 35), ...}
比賽結(jié)束后,需按排名順序依次打印選手成績,如何實現(xiàn)?

眾所周知,Python內(nèi)置的dict類型是無序的,那我們要如何解決該問題呢?這時,我們可以使用collections.OrderedDict來處理該問題。代碼如下:

# -*- coding: utf-8 -*-

from collections import OrderedDict

d = OrderedDict()

d['Li'] = (1, 29)

d['Jack'] = (2, 35)

d['Jim'] = (3, 36)

for k in d:
    print k

其輸出結(jié)果如下:

Li
Jack
Jim

這時,我們遍歷字典輸出的鍵的順序就是字典錄入鍵值對的順序。為了加深我們對collections.OrderedDic的理解,我們來具體模擬一下這個編程競賽系統(tǒng),代碼如下:

# -*- coding: utf-8 -*-

from collections import OrderedDict
from time import time, sleep
from random import randint

# 模擬八名參賽選手
players = list('ABCDEFGH')

d = OrderedDict()

# 比賽開始
start = time()

for i in xrange(8):
    # 模擬答題用時
    sleep(3)
    # 隨機選出一名選手作為答題完畢
    p = players.pop(randint(0, 7-i))
    # 選手答題完畢時間
    end = time()
    # 選手成績記錄
    d[p] = (i+1, end-start)

# 公布選手成績
for k in d:
    print k, d[k]

其運行結(jié)果如下:

B (1, 3.0)
D (2, 6.0)
H (3, 9.000999927520752)
F (4, 12.000999927520752)
A (5, 15.000999927520752)
C (6, 18.000999927520752)
E (7, 21.000999927520752)
G (8, 24.000999927520752)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容