日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

在Python中如何讓字典保持有序_python

作者:AllardZhao ? 更新時間: 2022-06-27 編程語言

1、如何讓字典保持有序

實際案例:

某編程競賽系統,對參賽選手編程解題進行計時,選手完成題目后,把該選手解題用時記錄到字典中,以便賽后按選手名查詢成績。(答題用時越短,成績越優秀。)

如:LiLei第2名用時43分鐘,HanMeimei第5名用時52分鐘,Jim第1名用時39分鐘

{'LiLei': (2, 43), 'HanMeimei': (5, 52), 'Jim': (1, 39), ...}

比賽結束后,需要按排名順序依次打印選手成績,如何實現?

注:為什么不用列表而用字典?就是為了方便賽后可以按名字查詢成績。

Python V3.6版本之前字典無序,3.6版本之后字典開始有序。

?解決方案:

  • 使用collections.OrderedDict(有序字典)
  • OrderedDict代替內置字典Dict,依次將選手成績存入OrderDict

2、代碼演示

(1)OrderedDict有序字典簡單使用

d = dict()
print(d)
d['Jim'] = (1, 35)
d['Leo'] = (2, 37)
d['Bob'] = (3, 40)
print(d)
?
# 希望迭代字典時候,按每項先后進入順序打印
for k in d:
? ? print(k)
?
# 導入有序字典
from collections import OrderedDict
?
d2 = OrderedDict()
d['Jim'] = (1, 35)
d['Leo'] = (2, 37)
d['Bob'] = (3, 40)
for k in d:
? ? print(k)

(2)模擬編寫競賽答題

# 編程模擬選手
players = list('ABCDEF')
# 模擬選手的答題時間
from time import time
from random import randint
from collections import OrderedDict
?
d = OrderedDict()
start = time()
for i in range(6):
? ? # 等待用戶輸入,作為阻斷進程
? ? input()
? ? # 每次隨機選擇一名選手答題完畢
? ? p = players.pop(randint(0, 5 - i))
? ? end = time()
? ? print(i + 1, p, end - start)
? ? # 記錄成績
? ? d[p] = (i + 1, end - start)
?
print()
print('-' * 20)
# 按先后進入字典順序,打印成績單
for k in d:
? ? print(k, d[k])

原文鏈接:https://xiaokang.blog.csdn.net/article/details/124437246

欄目分類
最近更新