实际案例:

   某编程竞赛系统,对参赛选手编程解体进行计时,选手完成题目后,吧该选手解体用时记录到字典中,以便赛后按选手名查询成绩

  {'Lilei':(2,43),'HanMei':(5,52),'Jim':(1,39)...}

比赛结束后,需按排名顺序依次打印选手成绩, 如何实现?

from collections import OrderedDict
# shuffle 洗牌函数, 可以将列表的次序打乱
from random import shuffle '''
使用标准库 collections 中的 OrderedDict
以 OrderedDict 替代字典 Dict, 依次将选手成绩存入 OrderedDict
''' players = list('abcdefgh')
shuffle(players)
print(players)
# ['c', 'b', 'd', 'a', 'f', 'e', 'h', 'g']
od = OrderedDict()
# 简单模拟,排名次序
for i, p in enumerate(players, 1):
od[p] = i
print(od)
# OrderedDict([('b', 1), ('a', 2), ('f', 3), ('c', 4), ('d', 5), ('g', 6), ('h', 7), ('e', 8)])
# 编写接口-根据名字查询成绩 def query_by_name(d, name):
# 根据键-取值
return d[name] # 测试 -根据键 取值 --即根据名字-取成绩
print(query_by_name(od, 'c'))
print(query_by_name(od, 'b'))
'''
根据 次序-查询 名字, 或者根据 范围, 查询名字
iter(od) 不支持切片和索引操作
在迭代工具 itertoools 中, 引入 islice 进行切片
'''
from itertools import islice
# islice 工作原理: 依次迭代前面可迭代对象
# 例子-- 从0开始迭代,范围外的值舍去
isTest = islice(range(10), 3, 6)
print(list(isTest))
# [3, 4, 5]
isOd = islice(od, 3, 6)
print(list(isOd))
# ['e', 'h', 'a'] # 根据排名value,查询键key
def query_by_order(d, a, b=None):
a -= 1
# 如果只想查询 一个数据
if b is None:
# b=a+1,说明只取到a 即(a,a+1)
b = a+1
return list(islice(od, a, b)) # 测试
print(query_by_order(od, 4))
print(query_by_order(od, 3, 6))
# ['g']
# ['c', 'g', 'f', 'e']

 上述解题思路,基于python3.5

python3.6中,内置字典dict的行为已经与 OrderedDict一致,使用dict即可

 但为了代码兼容,建议还是使用 OrderedDict函数进行.

如何让字典保持有序---Python数据结构与算法相关问题与解决技巧的更多相关文章

  1. Python数据结构与算法相关问题与解决技巧

      1.如何在列表, 字典, 集合中根据条件筛选数据¶ In [1]: from random import randint In [2]: data = [randint(-10,10) for _ ...

  2. 如何在列表,字典,集合中,根据条件筛选数据 -- Python数据结构与算法相关问题与解决技巧

    实际案例: 1.过滤掉列表 [3,9,-1,10,20,-2..]的负数 2.筛出字典{'LiLei':79,'Jim':88,'Lucy':92...}中值高于90的项 3.筛出集合 {77,89, ...

  3. 如何快速查找到多个字典中的公共键(Key)---Python数据结构与算法相关问题与解决技巧

    如何快速查找到多个字典中的公共键(Key)-?   实际案例: 西班牙足球甲级联赛,每轮球员进球统计: 第1轮: { '苏亚雷斯':1,'梅西':2,'本泽马':1,...} 第2轮: { '苏亚雷斯 ...

  4. 如何根据字典值的大小,对字典中的项排序---Python数据结构与算法相关问题与解决技巧

    实际案例: 某班英语成绩以字典形式存储为: { 'LiLei' : 90, 'Jim' : 88, 'Lucy': 92 } 如何根据成绩高低,计算学生排名 -- 根据分数,进行排名,并且把排名信息添 ...

  5. 如何统计序列中元素的频度---Python数据结构与算法相关问题与解决技巧

    实际案例: 1. 某随机序列 [12,5,6,4,6,5,5,7]中,找到出现次数最高的3个元素,它们出现的次数是多少? 2. 对于某英文文章的单词,进行词频统计,找到出现次数最高的10个单词,它们出 ...

  6. 如何为元组中的每个元素命名,提高程序可读性---Python数据结构与算法相关问题与解决技巧

    实际案例: 学生信息系统中,数据为固定格式:(名字,年龄,性别,邮箱) ,通常使用元组来存储 使用优点: 使用元组最大的优点在于节省空间,存储相同的数据,使用元组比使用字典,空间小很多 使用缺点: 访 ...

  7. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  8. Python数据结构与算法--List和Dictionaries

    Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...

  9. Python数据结构与算法--算法分析

    在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...

随机推荐

  1. 如何在github上部署自己的前端项目

    很多时候我们想需要一个地址就可以访问自己的前端作品, 但是注册一个服务器和域名是需要花钱,很多小伙伴都不愿意, 其实这种前端静态页面github就可以帮我们预览其效果,而且只要在有网的情况下都可以访问 ...

  2. HBase(三)——搭建Fully-distributed

    HBase搭建--Fully-distributed 1.搭建方式说明 By default, HBase runs in standalone mode. Both standalone mode ...

  3. Linux知识点拾遗-磁盘UUID

    查看磁盘UUID 方法1 ls -l /dev/disk/by-uuid example: [root@dplinux ~]# ll /dev/disk/by-uuid/ total 0 lrwxrw ...

  4. 洛谷 P1896 [SCOI2005]互不侵犯 (状态压缩DP)

    题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 注:数据有加强(2018/4/25) ...

  5. 【串线篇】spring boot嵌入式Servlet容器启动原理;

    什么时候创建嵌入式的Servlet容器工厂?什么时候获取嵌入式的Servlet容器并启动Tomcat: 获取嵌入式的Servlet容器工厂: 1).SpringBoot应用启动运行run方法 2).r ...

  6. ThinkPHP生成静态页buildHtml方法

    原来ThinkPHP自带了生成静态页的函数buildHtml,使用起来很方便!最新的手册里没写这个方法,向大家介绍一下. PHP 1 2 3 4 5 6 7 8 9 10 11     protect ...

  7. Array 和 ArrayList 、 List 以及 LinkedList 的区别

    下面列出了Array(数组)和ArrayList(集合)的不同点: Array可以包含基本类型和对象类型,ArrayList只能包含对象类型. Array大小是固定的,ArrayList的大小是动态变 ...

  8. easyuUI实现客户分页显示逻辑分析

    页面 前端 前端easyUI,自带分页功能,添加pagination属性 前端会传给后端两个属性: page:当前页码 rows:每页显示记录数 后端 接收page和rows参数 根据参数分页查询 获 ...

  9. redis数据库的set去重操作

    一:业务需求  用户名存储之前进行去重判断 方法一:使用redis的set集合进行去重判断 keys * 查看所有的键 type 键名 查看对应的数据类型 sadd set a b c 往set集合里 ...

  10. 【前端】DOM操作

    1 什么是DOM 全称 Document Object Model 文档对象模型. 一个web页面的展示,是由html标签组合成的一个页面,dom对象实际就是将html标签转换成了一个文档对象.可以通 ...