字典

列表可以存储大量的数据类型,但是只能按照顺序存储,数据与数据之间关联性不强。

所以咱们需要引入一种容器型的数据类型,解决上面的问题,这就需要dict字典。

字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成.

在dict中key是 唯⼀的.在保存的时候, 根据key来计算出⼀个内存地址. 然后将key-value保存在这个地址中.

这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key必须是可hash的

可以改变的都是不可哈希的, 那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址⽽规定的.

已知的可哈希(不可变)的数据类型: int, str, tuple, bool 不可哈希(可变)的数据类型: list, dict, set

语法:{'key1':1,'key2':2}

注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据

1.为什么要学习字典

  1. 存储数据比较大
  2. 字典的查找速度比列表快
  3. 方便查找

2.基本格式

dic = {"键":"值"}
键是唯一的
不可变数据类型才能作为字典的键
字典是无序的,可变的
# 例如
dic = {"123":1,2:"alex",False:[12,34],(1,2):"wusir"}

3.字典的基本操作

# 增
dic[3] = "233"
dic.setdefault(键,默认值)
print(dic.setdefault(键,默认值)) #打印出来的是值
# 删
dic.pop(键)
dic.clear() # 清空字典
del dic[键] #删除该键值对
# 改
dic[键]=值
dic.update()
# 查
dic["键"]
dic.get("键","找不到时返回设定的默认值")
# 其他操作 dic.keys() # 取出字典中所有的键
dic.values() # 取出字典中的所有的值
dic.items() # 取出字典中的键值对,并以元组的形式存在列表中 #键值分离
for k,v in dic.items:
pring(k,v) #字典支持嵌套使用
# 解构
a, b =[10, 20]

面试题:

a = [1,2,3]
b = (3,2,1)
# 用一行代码将数值转换
a,b = b,a
print(a,b)

简单测试题

# 利用所学知识,将id前3位与字典中相对应的地区进行匹配,得出id中各属地出现的次数
# 得出结果形如:{"河南":3,"河北":2,"北京":1,"内蒙":1}
id = [120121198903119561,
120121198903110561,
120121196903119561,
130482198307144762,
130482198307144662,
110121197805144347,
150121197502122799] addrs = {
120: "河南",
130: "河北",
110: "北京",
150: "内蒙",
}
# 方式一
dic = {}
for i in id:
addrs_key = int(str(i)[0:3])
dic_key = addrs[addrs_key]
if dic.get(dic_key):
dic[dic_key] +=1
else:
dic[dic_key] = 1
print(dic) # 方式二
dic1 = {}
for i in id:
a = int(str(i)[0:3])
if dic1.get(addrs[a]):
dic1[addrs[a]] += 1
else:
dic1.setdefault(addrs[a], 1)
print(dic1) # 方式三
dic1 = {}
for i in id:
dic1[addrs[int(str(i)[0:3])]] = dic1.get(addrs[int(str(i)[0:3])], 0) + 1
print(dic1)

# 将字符串s转变为形如{'key1': '1', 'key2': '2', 'key3': '3'}的字典
s = "key:1-key:2-key:3"
ls = s.split("-")
dic = {}
for i in ls:
k,v= (i.split(":"))
dic[k+f"{v}"]=v
print(dic)

测验

  1. 用你能想到的最少的代码生成一个包含100个key的字典,每个value的值不能一样

  2. {‘k0’: 0, ‘k1’: 1, ‘k2’: 2, ‘k3’: 3, ‘k4’: 4, ‘k5’: 5, ‘k6’: 6, ‘k7’: 7, ‘k8’: 8, ‘k9’: 9} 请把这个dict中key大于5的值value打印出来。

  3. 把题2中value是偶数的统一改成-1

  4. 请设计一个dict, 存储你们公司每个人的信息, 信息包含至少姓名、年龄、电话、职位、工资,并提供一个简单的查找接口,用户按你的要求输入要查找的人,你的程序把查到的信息打印出来

    # 下面解答仅个人观点
    # 1
    key = {}
    for i in range(100):
    key.setdefault(i,f"我是{i}")
    print(key) # 2 and 3
    dic = {'k0': 0, 'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6, 'k7': 7, 'k8': 8, 'k9': 9}
    for k,v in dic.items():
    if v > 5:
    print(dic[k])
    for k,v in dic.items():
    if v % 2 == 0:
    dic[k] = -1
    print(dic) # 4
    dic = {"小明":[18,199,"销售",8000],
    "小白":[20,110,"安全",9000]}
    user_input = input("请输入你要查找的人的名字:")
    for k in dic:
    if k == user_input:
    print(f"小明的年龄是{dic[k][0]},电话是{dic[k][1]},职业是{dic[k][2]},工资是{dic[k][3]}")
    break
    else:
    print("查无此人")
    break

python基础【第七篇】的更多相关文章

  1. python基础-第七篇-7.2面向对象(进阶篇)

    进入到今天的探索前,我先对上节内容进行一下回顾: 面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用 类是一个模板,模板中包装了多个函数可供使用 对象是基于类创建的,实例用于调用被包装在类 ...

  2. python基础-第七篇-7.4异常处理

    异常基础: 异常处理首先要捕获异常,不让程序中断,也不让错误信息直接呈现出来,然后就是你该怎么处理异常,以什么方式显示 try: pass except Exception,ex: pass 在需要用 ...

  3. python基础-第七篇-7.1初识类和对象

    创建类和对象 刚开始我们接触得多的编程方式为面向过程编程,这种方式就是根据业务逻辑从上往下垒代码,后来又出现了函数式编程,就是为了提高代码的重用性,减轻程序猿的工作量--而今天我们即将学的 面向对象编 ...

  4. python基础-第七篇-7.3反射

    定义 反射是根据字符串的形式去对操作其成员 了解反射前,我先看看内置方法__import__,还记得这个内置方法吗? __import__  用于以字符串的形式导入模块 inp = input('请输 ...

  5. Python【第七篇】面向对象进阶

    大纲 一.面向对象高级语法 1.静态方法.类方法.属性方法 2.类的特殊成员方法 3.反射 二.异常处理 三.网络编程之socket基础 一.面向对象高级语法 1.静态方法:名义上归类管理,实际上静态 ...

  6. Python 基础学习 总结篇

    Python 基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结 ...

  7. python基础-第六篇-6.2模块

    python之强大,就是因为它其提供的模块全面,模块的知识点不仅多,而且零散---一个字!错综复杂 没办法,二八原则抓重点咯!只要抓住那些以后常用开发的方法就可以了,哪些是常用的?往下看--找答案~ ...

  8. Python基础【第一篇】

     一.Python简介 Python的创始人(Guido von Rossum 荷兰人),Guido希望有一种语言既能像C一样方便地调用操作系统的功能接口,也能像shell脚本一样,轻松地实现编程,A ...

  9. python基础知识第一篇(认识Python)

    开发语言: 高级语言:python java php c++ 生成的字节码 字节码转换为机器码 计算机识别运行 低级语言:C 汇编 生成的机器码 PHP语言:适用于网页,局限性 Python,Java ...

  10. 【python自动化第七篇:面向对象进阶】

    知识点概览: 静态方法,类方法,属性方法 类的特殊方法 反射 异常处理 socket开发基础 一.静态方法:@staticmethod 只是名义上归类管理,实际上在静态方法里访问不了类或者实例中的任何 ...

随机推荐

  1. fiddler 解决不能抓https包的问题

    新解决方案 重置Fiddler,具体步骤: Tools > Fiddler Options > HTTPS > “Certificates generated by MakeCert ...

  2. Springboot集成Mybatis+PageHelper

    1.Springboot项目引入mysql和mybatis的依赖: <dependency> <groupId>org.mybatis.spring.boot</grou ...

  3. centos 7 设置开机启动脚本

    vi /etc/rc.d/rc.local 在末尾追加 sh脚本 sh脚本要提前赋予执行权限 下面是测试,开机同步北京时间 [root@commonTest bin]# vi /usr/local/b ...

  4. 在$CF$水题の记录

    CF1158C CF1163E update after CF1173 很好,我!expert!掉rating了!! 成为pupil指日可待== 下次要记得合理安排时间== ps.一道题都没写的\(a ...

  5. Https socket 代理

    https直接与服务器通过ssLsocket连接可行 import java.io.InputStream;import java.io.OutputStream;import java.securi ...

  6. MYSQL全文索引—CONTAINS语法

    我们通常在 WHERE 子句中使用 CONTAINS ,就象这样:SELECT * FROM table_name WHERE CONTAINS(fullText_column,'search con ...

  7. Redis的常用功能

    排序: sort mylist 排序 sort mylist alpha desc limit 0 2 字母排序 sort list by it:* desc by命令 sort list by it ...

  8. Java 代码规范,你应该知道的一些工具和用法(转)

    转自:http://yifeng.studio/2017/06/30/coding-with-code-style/ Java 代码规范,你应该知道的一些工具和用法 2017-06-30 从事编程这个 ...

  9. solaris系统动态查看swap的使用情况

    root@tt # root@tt # prstat  -aPlease wait... PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU ...

  10. 03.线程的通知notify与等待wait

    wait().notify.notifyAll()方法 wait().notify().notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态. 这三个方法最终调用的都是jv ...