博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何让字典保持有序---Python数据结构与算法相关问题与解决技巧
阅读量:5130 次
发布时间:2019-06-13

本文共 1458 字,大约阅读时间需要 4 分钟。

   实际案例:

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

  {'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] = iprint(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,查询键keydef 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函数进行.

 

转载于:https://www.cnblogs.com/goddog1024/p/11301123.html

你可能感兴趣的文章
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
【题解】青蛙的约会
查看>>
autopep8
查看>>
GIT在Linux上的安装和使用简介
查看>>
Android 官方新手指导教程
查看>>
幸运转盘v1.0 【附视频】我的Android原创处女作,请支持!
查看>>
[51nod] 1199 Money out of Thin Air #线段树+DFS序
查看>>
Red and Black(poj-1979)
查看>>
安装 Express
查看>>
存储(硬件方面的一些基本术语)
查看>>
观察者模式
查看>>
Weka中数据挖掘与机器学习系列之基本概念(三)
查看>>
Win磁盘MBR转换为GUID
查看>>
大家在做.NET B/S项目的时候多用什么设技术啊?
查看>>
Java SE和Java EE应用的性能调优
查看>>
leetcode-Sort List
查看>>
中文词频统计
查看>>
了解node.js
查看>>