如何让字典保持有序---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)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
随机推荐
- Java web项目搭建系列之二 Jetty下运行项目
在项目pom.xml文件中添加Jetty运行配置 在pom.xml文件project节点下插入如下代码: <build> <plugins> <plugin> &l ...
- Python自动化学习--异常提示
举例:打开一个不存在的文件时: >>open("abc.txt","r")会提示错误 Traceback (most recent call las ...
- Linux之bash的变量
1. 变量的显示,echo echo $变量 或 echo ${变量} eg. echo $HOME 或 echo ${HOME} 2. 变量的设置 变量的设置规则: (1)变量与变 ...
- 6号板编译失败找不到arm-none-linux-gnueabi-gcc
明明已经添加到/etc/environment 安装sudo apt-get install lib32z1 lib32ncurses5
- linux 时区问题
1.java项目发现 服务器时间不正确,修改了服务器时间之后依然没解决. 2.java虚拟机的时区也需要设置:
- noip2017简要题解。
重新写了一下去年的题来看看自己到底是有多傻逼. 小凯的疑惑 打表. 时间复杂度 搞了一大坨题面,但是真正有用的信息只有几个: 判断他给你的复杂度是多少. 判断当前循环进不进的去. 判断当前循环产生的贡 ...
- bzoj1367 [Baltic2004]sequence 左偏树+贪心
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1367 题解 先考虑条件为要求不下降序列(不是递增)的情况. 那么考虑一段数值相同的子段,这一段 ...
- IO操作基本步骤
package com.study02; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundE ...
- 【leetcode】1161. Maximum Level Sum of a Binary Tree
题目如下: Given the root of a binary tree, the level of its root is 1, the level of its children is 2, a ...
- 用vue构建项目同一局域网下通过ip访问
在webpack配置文件下改为 host:'0.0.0.0' 改为后启动跳转不到登录页面 需手动修改浏览器上的0.0.0.0:8080为自己ip加上:8080 就可以在别的电脑上进行访问了 举一反三: ...