IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 2021-09-11 -> 正文阅读

[Python知识库]2021-09-11


上一篇?<<? 本文?>>?下篇待续

速度比拼——字典VS列表


??学到dict的时候,看到“字典无序(默认),以key查value,不以key多寡论快慢”,一下子惊到了!
??其实,所说的“列表”还是dict.keys()。


????☆程序调试环境☆
????python 3.6.6 安卓版(手机)


知识点

??dict.get(key), dict.keys()

技巧

??对字典添加key,一定要检查key是否已在字典中,以免覆盖已有数据(覆盖数据没得提示🥴)

可以用这几行代码解决:

#如果姓名已在字典,修改姓名,直到不重key
k = 2
while True:
    if st.get(key_2)!=None:
        key_2 = name[1:]+str(k)
        k += 1
    else:
        break

?? “不论多寡”,那上百万哩?!当时就生出试试的强烈需求。

??但,上百万的key,让我怎么搞🧐

??碰巧,在做“学生信息管理系统”练习dict的时候,生出了用代码模拟“百万”数据的想法。

??想法有了,就是强烈愿望的trying。一次次的失败之后,终于用代码获取了我想要的百万数据。

在这里插入图片描述


??还等什么哩,赶紧码码来run咯。🤗🤗

字典直查key查找,Run的样子
10000学生(2万keys)字典

在这里插入图片描述

在这里插入图片描述

100w学生记录(200w)字典

在这里插入图片描述

在这里插入图片描述

200w学生记录(400wkeys)字典

在这里插入图片描述

在这里插入图片描述


直接dict.get(key)查找完整代码

#!/sur/bin/nve python
# coding: utf-8

import json, random, time, pickle


def show_student(d, i):
    '''打印学生信息'''
    
    if i.isdigit()==True:
        student_number = i
        name = list(d.get(i).keys())[0]
        info = d.get(i).get(name)
    else:
        name = i
        student_number = list(d.get(i).keys())[0]
        info = d.get(i).get(student_number)
    print(" "*4+"姓名:%s"%name)
    print(" "*4+"学号:%s"%student_number)
    print(" "*4+"性别:%(性别)s"%info)
    print(" "*4+"民族:%(民族)s"%info)
    print(" "*4+"籍贯:%(籍贯)s"%info)
    print(" "*4+"专业/学院:%(专业/学院)s"%info)


def show_10(st2):
    '''随机打印十个学生信息'''
    
    print("\n"*2)
    print('随机10个学生信息:'.rjust(22))
    #打印分割线
    print("~"*42)
    tens = random.sample(st2.keys(), k=10)
    k = 1
    for i in tens:
        n = 10
        for ii in i:
            if ii.isdigit()!=True:
                n -= 2
            else:
                n -= 1
        print(('%2.d. '%k).rjust(12), i+' '*n, list(st2.get(i).keys())[0])
        k += 1
    #打印分割线
    print("~"*42)
    return tens


#Main Code Start
#记录程序开始运行时间
time_star = time.time()
print("\n"*2, "正在读取'学生信息记录'……".rjust(22))
#pickle二进制解码
st2 = pickle.load(open('students_200w×2.dat', 'rb'))
print("\n"*2)
print('Pickle解码字典:\n key个数 %s,数据类型(%s)。\n'%(len(st2), type(st2)))
print("\n", "字典数据结构:{{'6000001': %s}, {'八爪章鱼': %s}}"%(st2.get('6000001'), st2.get('八爪章鱼')))
#调用函数列印随机10个学生姓名and学号
tens = show_10(st2)
#查找随机10个记录
print("\n"*2, "正在查找……".rjust(22), "\n"*2)
sum_sec, k = 0, 1
for i in tens:
    #查找学生信息记录
    search_time1 = time.time()
    show_student(st2, i)
    second = time.time()-search_time1
    s = '%2.d. 查询用时:%f s'%(k, second)
    print(s.center(36))
    k += 1
    sum_sec += second
    #打印分割线
    print("~"*42)


#打印查询用时

print("\n")
s = "查询用时:%f s,平均用时:%fs"%(sum_sec, sum_sec/10)
print(s.rjust(12), "\n"*2)


#打印模拟用时
second2 = time.time()-time_star
print("\n")
s = "Use time: %.4f s"%second2
print(s.rjust(12), "\n"*2)

遍历dict.keys()查找,Run的样子
10000学生(1万keys)字典

在这里插入图片描述

在这里插入图片描述

100w学生记录(100w)字典

在这里插入图片描述

在这里插入图片描述

200w学生记录(200w)字典

在这里插入图片描述

在这里插入图片描述

遍历查找dict.keys()完整代码

#!/sur/bin/nve python
# coding: utf-8

import json, random, time, pickle


def show_student(d, i):
    '''打印学生信息'''
    
    student_number = i[0]
    name = i[1]
    info = d.get(i)
    print(" "*4+"姓名:%s"%name)
    print(" "*4+"学号:%s"%student_number)
    print(" "*4+"性别:%(性别)s"%info)
    print(" "*4+"民族:%(民族)s"%info)
    print(" "*4+"籍贯:%(籍贯)s"%info)
    print(" "*4+"专业/学院:%(专业/学院)s"%info)


def show_10(st2):
    '''随机打印十个学生信息'''
    
    print("\n"*2)
    print('随机10个学生信息:'.rjust(22))
    #打印分割线
    print("~"*42)
    tens = random.sample(st2.keys(), k=10)
    k = 1
    for i in tens:
        print(('%2.d. '%k).rjust(12), i)
        k += 1
    #打印分割线
    print("~"*42)
    return tens


#Main Code Start
#记录程序开始运行时间
time_star = time.time()
print("\n"*2, "正在读取'学生信息记录'……".rjust(22))
#pickle二进制解码
st2 = pickle.load(open('students_1w×1.dat', 'rb'))
print("\n"*2)
print('Pickle解码字典:\n key个数 %s,数据类型(%s)。\n'%(len(st2), type(st2)))
key = ('600001', '八爪章鱼')
print("\n", "字典数据结构:{%s: %s}"%(key, st2.get(key)))
#调用函数列印随机10个学生姓名and学号
tens = show_10(st2)
#查找随机10个记录
print("\n"*2, "正在查找……".rjust(22), "\n"*2)
sum_sec, k = 0, 1
for i in tens:
    #查找学生信息记录
    search_time1 = time.time()
    show_student(st2, i)
    second = time.time()-search_time1
    s = '%2.d. 查询用时:%f s'%(k, second)
    print(s.center(36))
    k += 1
    sum_sec += second
    #打印分割线
    print("~"*42)


#打印查询用时

print("\n")
s = "查询用时:%f s,平均用时:%fs"%(sum_sec, sum_sec/10)
print(s.rjust(12), "\n"*2)


#打印模拟用时
second2 = time.time()-time_star
print("\n")
s = "Use time: %.4f s"%second2
print(s.rjust(12), "\n"*2)


??通过实验,字典的优势还是明显的。但数据不太庞大的,列表更有优势。在编程实践中,不用太纠结,根据对象需求,作更优化选择即可。


资源:
1.?百万学生信息记录生成代码
2.?中国全国省市名称dict源码


上一篇?<<? 本文?>>?下篇待续

温馨推荐

作者: 老齐

在这里插入图片描述

精品文章:学习编程的正确方法

来源:老齐教室


QQ:4794838(八爪章鱼)


  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:07:15  更:2021-09-12 13:08:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:21:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码