鱼C论坛

 找回密码
 立即注册
查看: 1548|回复: 2

[技术交流] 【007】Python让字典保持有序

[复制链接]
发表于 2019-6-11 23:03:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. '''
  2. 目的:假设一批选手参加比赛先后完成题目,按提交答案先后,记录姓名、排名、时间到字典
  3. '''
  4. from time import time
  5. from random import randint
  6. from collections import OrderedDict
  7. list_a = ['i','l','o','v','e']
  8. list_a_len = len(list_a)
  9. d_a =  OrderedDict()
  10. start = time()
  11. for i in range(list_a_len):

  12.     #每次输入即视为提交,产生一个时间end,减去start就是消耗的时间
  13.     input()

  14.     #每次随机某成员完成
  15.     member = list_a.pop(randint(0,list_a_len-1-i))
  16.     end = time()
  17.     print(i+1,member,end-start)

  18.     #依次添加到字典
  19.     d_a[member] = (i+1,end-start)
  20. print()
  21. print('-' * 20)
  22. for x in d_a:
  23.     print(x,d_a[x])
  24. '''
  25. 提问与思考:
  26. 1、time()方法返回当前时间的时间戳(1970纪元后经过的浮点秒数)
  27. 1、OrderedDict会根据放入元素的先后顺序 有序存储(先进在前)。所以输出的值是排好序的
  28. 2、pop() 方法用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
  29. '''
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-6-12 06:34:18 | 显示全部楼层
有几点疑问:
1. OrderDict本身那就是collections库里的有序字典吧?
2. 第17行: member = list_a.pop(randint(0,list_a_len-1-i)),这个如何做到随机一位成员完成的? 假设i = 1, list_a_len-1-i = 3,这个其实也是限制了完成的成员号吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-12 13:21:20 | 显示全部楼层
老笨啊 发表于 2019-6-12 06:34
有几点疑问:
1. OrderDict本身那就是collections库里的有序字典吧?
2. 第17行: member = list_a.pop(ra ...

1.对,就是调用OrderDict类代替原始dict类存储使之有序
2. 没有限制成员号。第一次循环i=0,随机范围就是[0,4],对应5位成员的下标,pop方法执行后就剩下4位成员了;第二次循环i=1,随机范围就是[0,3],对应剩下的4位成员下标,pop方法执行后就剩下3位成员了...以此类推
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-10 14:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表