如何让字典保持有序---Python数据结构与算法相关问题与解决技巧
实际案例:
某编程竞赛系统,对参赛选手编程解体进行计时,选手完成题目后,吧该选手解体用时记录到字典中,以便赛后按选手名查询成绩
{'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数据结构与算法相关问题与解决技巧的更多相关文章
- Python数据结构与算法相关问题与解决技巧
1.如何在列表, 字典, 集合中根据条件筛选数据¶ In [1]: from random import randint In [2]: data = [randint(-10,10) for _ ...
- 如何在列表,字典,集合中,根据条件筛选数据 -- Python数据结构与算法相关问题与解决技巧
实际案例: 1.过滤掉列表 [3,9,-1,10,20,-2..]的负数 2.筛出字典{'LiLei':79,'Jim':88,'Lucy':92...}中值高于90的项 3.筛出集合 {77,89, ...
- 如何快速查找到多个字典中的公共键(Key)---Python数据结构与算法相关问题与解决技巧
如何快速查找到多个字典中的公共键(Key)-? 实际案例: 西班牙足球甲级联赛,每轮球员进球统计: 第1轮: { '苏亚雷斯':1,'梅西':2,'本泽马':1,...} 第2轮: { '苏亚雷斯 ...
- 如何根据字典值的大小,对字典中的项排序---Python数据结构与算法相关问题与解决技巧
实际案例: 某班英语成绩以字典形式存储为: { 'LiLei' : 90, 'Jim' : 88, 'Lucy': 92 } 如何根据成绩高低,计算学生排名 -- 根据分数,进行排名,并且把排名信息添 ...
- 如何统计序列中元素的频度---Python数据结构与算法相关问题与解决技巧
实际案例: 1. 某随机序列 [12,5,6,4,6,5,5,7]中,找到出现次数最高的3个元素,它们出现的次数是多少? 2. 对于某英文文章的单词,进行词频统计,找到出现次数最高的10个单词,它们出 ...
- 如何为元组中的每个元素命名,提高程序可读性---Python数据结构与算法相关问题与解决技巧
实际案例: 学生信息系统中,数据为固定格式:(名字,年龄,性别,邮箱) ,通常使用元组来存储 使用优点: 使用元组最大的优点在于节省空间,存储相同的数据,使用元组比使用字典,空间小很多 使用缺点: 访 ...
- python数据结构与算法
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
- Python数据结构与算法--List和Dictionaries
Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...
- Python数据结构与算法--算法分析
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
随机推荐
- R语言 绘图——条形图可以将堆积条形图与百分比堆积条形图配合使用
在使用堆积条形图时候,新增一个百分比堆积条形图,可以加深读者印象. 封装一个function函数后只需要在调用的数据上改一下pos=‘fill’的代码即可.比较方便. 案例: # 封装函数 fun1& ...
- 解决Ubuntu环境下在pycharm中导入tensorflow报错问题
环境: Ubuntu 16.04LTS anacoda3-5.2.0 问题: ImportError: No module named tensorflow 原因:之前安装的tensorflow所用到 ...
- Linux学习--第二天--分区、格式化、系统安装、vmware、远程管理工具
分区 主分区加上扩展分区只能有四个,其中扩展分区只能有一个,扩展分区不能写入数据,不能格式化,只能包含逻辑分区.这是硬盘的限制. 格式化 分为高级与低级.文件系统是高级格式化.低级是硬盘操作. 扩展分 ...
- Keepalived高可用服务器案例
部署Keepalived高可用软件,实现如下: - 使用Keepalived实现web服务器的高可用 - Web服务器IP地址分别为192.168.4.100和192.168.4.200 - Web服 ...
- Codeforces 957 水位标记思维题
A #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #def ...
- python如何导入自定义文件和模块$PYTHONHOME$\Lib\site-packages 方法
python 中如何引用自己创建的源文件(*.py)呢? 也就是所谓的模块. 假如,你有一个自定义的源文件,文件名:saySomething.py .里面有个函数,函数名:sayHello.如下图: ...
- 【leetcode】1170. Compare Strings by Frequency of the Smallest Character
题目如下: Let's define a function f(s) over a non-empty string s, which calculates the frequency of the ...
- 【leetcode】1146. Snapshot Array
题目如下: Implement a SnapshotArray that supports the following interface: SnapshotArray(int length) ini ...
- postman-关联
1.提取 在Tests提取接口1的值如:userid //将获取的json数据赋给变量 var jsonData=pm.response.json(); //获取返回的userid值 user_id= ...
- mybatis学习$与#号取值区别
1,多个参数传递用map或实体封装后再传给myBatis, mybatis学习$与#号取值区别 #{} 1.加了单引号, 2.#号写是可以防止sql注入,比较安全 select * from use ...