鱼C论坛

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

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

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

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

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

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

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

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

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

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> 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,这个其实也是限制了完成的成员号吧?
想知道小甲鱼最近在做啥?请访问 -> 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位成员了...以此类推
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 20:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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