创建有序字典

有序字典的创建方法和普通的dict类似,不过由于多了保留顺序的功能,因此在使用可迭代对象创建有序字典时,可以对它先排个序,让创建出来的字典元素也是有序的:

data = [('a',1),('b',3),('c',2)]
od = collections.OrderedDict(sorted(data,key=lambda s:s[0]))#按数据中key值的大小排序
print(od)
od = collections.OrderedDict(sorted(data,key=lambda s:s[1]))#按数据中value值的大小排序
print(od)

得到的结果:

OrderedDict([(‘a’, 1), (‘b’, 3), (‘c’, 2)])
OrderedDict([(‘a’, 1), (‘c’, 2), (‘b’, 3)])

这里使用的sorted函数,它返回对一个可迭代对象排序后的结果,如果可迭代对象的元素不能直接进行比较(比如元素是一个list或tuple等),则需要指定key函数。

这里使用lambda表达式lambda s:s[0]和lambda s:s[1],分别指定key为data中每个元素(tuple类型)的第一个元素和第二个元素。

修改顺序

有序字典提供了一个move_to_end函数,这个函数可以将指定的键值对移动到最前面或者最后面,即最左边或最右边:

dt = collections.OrderedDict()
dt['a'] = 0
dt['b'] = 1
dt['c'] = 2
dt.move_to_end('b',last = False) #将`b`键值对移动到最前方
print(dt)
dt.move_to_end('b',last = True) #将`b`键值对移动到最后方
print(dt)

得到的结果:

OrderedDict([(‘b’, 1), (‘a’, 0), (‘c’, 2)])
OrderedDict([(‘a’, 0), (‘c’, 2), (‘b’, 1)])

编程要求

根据提示,在右侧编辑器补充代码,实现函数功能:读取n(n>0)行输入,以每一行的数据为key,行号(从0开始)为value,建立n对键值对,然后将他们按照key排序后,放入一个有序字典,最后输出这个有序字典。

测试说明
我会对你编写的代码进行测试:

测试输入:
3
a
c
b
预期输出:
OrderedDict([(‘a’, 0), (‘b’, 2), (‘c’, 1)])

测试输入:
4
A
B
D
C
预期输出:
OrderedDict([(‘A’, 0), (‘B’, 1), (‘C’, 3), (‘D’, 2)])

代码:

import collections

def Func():
    #在此处补充代码完成功能
    #创建一个空字典
    zidian = []
    #键盘输入整数
    n = int(input())
    #将n循环依次赋值给i
    #0,n的意思是0-n。这里的n是3,那么就是0,1,2
    #如果是4的话就是0,1,2,3。
    for i in range(0,n):    
        #读取键盘输入的字符串赋值给v
        #测试1输入acb,对应的就是a=0,c=1,b=2
        v = input()
        #把v也就是数据作为key,i也就是行号作为value作为值添加到字典zidian中
        zidian.append((v,i))
    #创建一个有序字典
    #有序字典用lambda表达式按数据中心中key值的大小排序
    od = collections.OrderedDict(sorted(zidian,key=lambda s:s[0]))
    #打印有序字典
    print(od)