字典有序

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']
发布了74 篇原创文章 · 获赞 43 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/fenglei0415/article/details/85111871