collections中封装了OrderedDict方法,目的是给dict 增加有序功能。但是从python3.6 开始,dict默认就有序了。来测试下
from collections import OrderedDict
od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3
od.keys()
>>> odict_keys(['a', 'b', 'c'])
d = dict()
d['d'] = 1
d['e'] = 2
d['f'] = 3
d.keys()
>>> dict_keys(['d', 'e', 'f'])
"""从python3.6开始,dict就默认有序了"""
接下来有一需求,如何通过切片或者名次取出字典里的值呢?
可以这样实现:
from random import shuffle
from itertools import islice
students = list('abcdefgh')
shuffle(students) # shuffle打乱顺序
students
>>> ['e', 'b', 'a', 'd', 'g', 'h', 'c', 'f']
d = dict()
for i, p in enumerate(p, 1):
d[p] = i
print(d)
>>> {'e': 1, 'b': 2, 'a': 3, 'd': 4, 'g': 5, 'h': 6, 'c': 7, 'f': 8}
# 以上是仿造的一个有序的学生名次字典
# 定义一个接口
def query_name(d, name):
return d['name']
query_name('a')
>>> 3
# 再完善下
def query_name(d, first=None, last=None):
if first is not None and first > 0:
first -= 1
if last is None:
b = a+1
return list(islice(d, first, last))
query_name(d, 3)
>>> 'a'
query_name(d, 3, 6)
>>> ['a', 'd', 'g', 'h']
# 这样是不是更和谐了
# islice 用法, 返回一个序列的前n项
list(islice(d, 5))
>>> ['e', 'b', 'a', 'd', 'g']