字典有序

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']

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值