Python之有序字典 (OrderdDict)


任务描述

本关任务:读取数据创建n个键值对,将其排序后放入有序字典并输出。

有序字典 (OrderedDict)

有序字典和普通的dict基本上是相似的,只有一点不同,那就是有序字典中键值对的顺序会保留插入时的顺序

创建有序字典

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

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

得到的结果:
OrderedDict([('a', 1), ('b', 3), ('c', 2)])
OrderedDict([('a', 1), ('c', 2), ('b', 3)])

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

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

修改顺序

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

  1. dt = collections.OrderedDict()
  2. dt['a'] = 0
  3. dt['b'] = 1
  4. dt['c'] = 2
  5.  
  6. dt.move_to_end('b',last = False) #将`b`键值对移动到最前方
  7. print(dt)
  8. dt.move_to_end('b',last = True) #将`b`键值对移动到最后方
  9. 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():
    #在此处补充代码完成功能
    n = int(input())
    if(n>=0):
        data = {}
        for i in range (n):
            strs = input()
            data[strs] = i
          #按照key值的大小排序
        od = collections.OrderedDict(sorted(data.items(),key=lambda s:s[0]))
        print(od)

 

你可能感兴趣的:(Python基础)