实际案例:

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

  {'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. Xcode 运行时异常

    一:unable to boot the ios simulator:模拟器异常 1.在添加了新的xcode版本调试包时,出现旧版模拟器不支持的情况,关闭旧版模拟器,重新运行 二:Could not ...

  2. DRF之三大认证

    一.用户认证Authorticatons 1.源码解析 第一步. 找入口 def dispatch(self, request, *args, **kwargs): # 1.首先我们进入的是APIVi ...

  3. H5微信授权登录

    这里介绍H5微信授权登录,采用了微信公众号授权原理,是oauth2的登录授权方式,简单的来讲,就是用户通过手机微信确认登录之后,微信方会返回一个授权码code给回第三方(接入方),这个授权码code一 ...

  4. MFC学习笔记3---使对话框风格与系统统一

    有一件郁闷了我很久的事情,在VS中编辑对话框或者点击预览时都是以Win7风格体现的按钮及对话框: 点击上图测试对话框: 然而生成的应用程序却是这样的: 这样人很不爽啊,按钮风格回到了N年前的版本,复古 ...

  5. dying relu 和weight decay

    weight decay就是在原有loss后面,再加一个关于权重的正则化,类似与L2 正则,让权重变得稀疏: 参考:https://www.zhihu.com/question/24529483 dy ...

  6. vue无线滚动组件封装

    <template> <div class="scroll-wapper" :style="{height: scrollHeight + 'px'}& ...

  7. react:如何创建一个新项目

    如何用react创建一个新的项目 我们打开react官网:https://reactjs.org/docs/create-a-new-react-app.html 看到以下命令 npx create- ...

  8. Git Fast Forward 和 no fast foward

    如果执行了 Fast Forward,开发者根本不会看到这个分支,就像在 master 直接 commit 一样.

  9. python基础练习题2

    01:python九九乘法表 for i in range(1,10): for j in range(1,i+1): print('{}*{}={}'.format(j,i,i*j),end='\t ...

  10. Azure IoT 技术研究系列1

    物联网技术已经火了很多年了,业界各大厂商都有各自成熟的解决方案.我们公司主要搞新能源汽车充电,充电桩就是我们物联网技术的最大应用,车联网.物联网. 互联网三网合一.作为Azure重要的Partner和 ...