字典

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

所以咱们需要引入一种容器型的数据类型,解决上面的问题,这就需要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. Java常用的几个Json库,性能强势对比!

    作者:飞污熊 https://xncoding.com/2018/01/09/java/jsons.html 本篇通过JMH来测试一下Java中几种常见的JSON解析库的性能.每次都在网上看到别人说什 ...

  2. Select.snippet

    <?xml version="1.0" encoding="utf-8"?> <CodeSnippets xmlns="http:/ ...

  3. 使用 lombok 简化代码

    使用前的准备 1.Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO).它通过注解实现这一目的.  <1>添加 ...

  4. java的几种定时器

    https://blog.csdn.net/coolwindd/article/details/82804189 1.@Scheduled注解 @Scheduled注解是最简单的方式,只需要启用定时器 ...

  5. 如何判断一个List集合中是否有空值

    list.Any(v => string.IsNullOrWhiteSpace(v))

  6. tomcat manager 禁止外网访问 只容许内网访问

    参考:http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html A default Tomcat installation includes ...

  7. event(1)

    event event(事件流)是 window对象的一个属性 在JS中事件有2种类型 一种是冒泡类型 一种是捕获类型 冒泡类型最先是在IE中出现,而捕获类型最先在标准的DOM中出现,不过最终IE得胜 ...

  8. OpenCV常用基本处理函数(1)读写

    图像的基本操作 cv.imread()      读取图片 cv.imshow()     显示图片 cv2.imwrite()    保存图像 使用摄像头捕获实时图像 OpenCV 为这中应用提供了 ...

  9. css强制换行和超出部分隐藏实现

    一.强制换行 1 word-break: break-all; 只对英文起作用,以字母作为换行依据. 2 word-wrap: break-word; 只对英文起作用,以单词作为换行依据. 3 whi ...

  10. cytoscape.js 教程

    因为数据要展示双向关系,最终选用了cytoscape.js. 效果如图,echarts只能显示单项数据关系. 据我理解,这个插件分两种,一种是基于jquery的,另一种是原声的. 基于jquery是加 ...