2-6如何让字典保持有序

1、实现方法

Dict字典是无序的,collections模块下的OrderedDict是有序的字典,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:

>>> d = {}
>>> d['lilei'] = 18
>>> d['hanmeimei'] = 16
>>> d['jim'] = 17
>>> 
>>> d
{'lilei': 18, 'jim': 17, 'hanmeimei': 16}


>>> from collections import OrderedDict
>>> d = OrderedDict()
>>> d['lilei'] = 18
>>> d['hanmeimei'] = 16
>>> d['jim'] = 17
>>> d
OrderedDict([('lilei', 18), ('hanmeimei', 16), ('jim', 17)])

测试本例方法:

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

plears = list('ABCDEFGH')
start = time()
d = OrderedDict()

for i in xrange(8):
    raw_input()    #阻塞函数输入任意键后,继续执行
    end = time()   #获得此时时间
    p = plears.pop(randint(0,7-i))  #i从0迭代到7,随机弹出一个,每弹出后,列表长度减少1,randint()生成的随机位置也应该减少一个
    d[p] = (i+1,end-start)  #i+1,序号让从1开始
    print(i+1,p,end-start)

print("*"*20)      #输出分割线

for i in d:         #将有序字典中,迭代输出 
print(i,d[i])
测试代码

执行输出 

(1, 'E', 1.4719998836517334)

(2, 'G', 1.8449997901916504)

(3, 'D', 2.181999921798706)

(4, 'F', 2.503999948501587)

(5, 'A', 2.8219997882843018)

(6, 'B', 3.132999897003174)

(7, 'C', 3.4670000076293945)

(8, 'H', 3.7789998054504395)

********************

('E', (1, 1.4719998836517334))

('G', (2, 1.8449997901916504))

('D', (3, 2.181999921798706))

('F', (4, 2.503999948501587))

('A', (5, 2.8219997882843018))

('B', (6, 3.132999897003174))

('C', (7, 3.4670000076293945))

('H', (8, 3.7789998054504395))

posted on 2018-04-02 11:27  石中玉smulngy  阅读(200)  评论(0)    收藏  举报

导航