文章目录
一、什么是字典
字典并不是什么全新的概念,早在上小学时,你就已经接触过字典,每当有不会在汉字是就会根据拼音在字典里找到与它对应的页数是,字典的结构和python语言中的字典,在结构上是一样的。
例如我 们以读音来查找一个汉字,比如"邓"这个字,读音是deng,一声,你一定可以在字典里找到与它对应的页数,假设是第100页,那么deng 和 100之间就有一个映射关系,你知道了deng,也就知道了100。
另一个较为常见的例子是手机通讯录,你想找一个人的电话时,你应该在通讯录里找到这个人的名字,然后点进去查看它的电话号,姓名和电话号之间存在着映射关系,你知道姓名,就知道电话号,下面这张图展示了字典的数据结构
二、字典(dict)的特点
-
python中的字典(dict)是数据的无序集合, 与列表,元组,集合将单个值作为存储数据不同, 字典存储的是key:value对, 字典中存储的数据总是成对的, key被称之为键, value称之为值, 值可以是任意数据且可重复, 而键不可重复且必须是可hash的。如果出现重复后面的会替换前面的数据。
-
字典属于一种新的数据结构,称之为映射(mapping)。
-
字典存储性能相对较差,但是查询数据性能较好。
-
每个字典当中都有多个键(key)值(value)对,每个键值对我们称之为一项(item)。
-
一般称冒号前面的为键(key),简称k;冒号后面的为值(value),简称v。
2.1 创建一个字典
2.1.1 创建字典
-
字典是一个容器类型数据,字典里存储的是键值对,键值对用冒号分割key与value,每个键值(key-value)对用逗号分割,整个字典包裹在花括号{}中。
-
字典的创建方法:
- 符号为大括号
- 数据为键值对形式出现
- 各个键值对之间用逗号隔开
-
下面是创建一个字典几种放法的示例
# 使用{} {key:value,key:value}
d = {
'name':'钢铁侠','age':'24','sex': '男'}
# name为键,又叫'key' 钢铁侠为值
print(d['name'],d['age'],d['sex'])
# 葫芦娃 10 男
# 空字典
d2 = {
}
# 使用dict() 函数来创建字典
d3 = dict(name = '钢铁侠',age = '24',sex = '男')
print(d3,type(d3))
# {'name': '钢铁侠', 'age': '24', 'sex': '男'} <class 'dict'>
- dict()函数也可以将一个包含有双值子序列的序列转换为字典。
- 双值序列:序列中只有两个值。例如:‘mk’、[4,5]、(‘a’,‘b’)。
- 子序列:序列中的袁术也是个序列,那么我们称这个元素为子序列。例如:[(‘w’,1),(1,2)]。
d4 = dict([('name','葫芦娃'),('age',10)])
print(d4,type(d4))
# {'name': '葫芦娃', 'age': 10} <class 'dict'>
print(d4['age'])
# 10
语法:d[key]可以根据字典的键来获取元素,但是key值要加上引号,不加引号就会把它当做变量来出来。
- 如果想知道字典中有多少数据,可以使用len函数来获取
print(len(d4))
想要知道一个key是否在字典中存在,使用in 或者not in 成员操作符
print('葫芦娃' in d4)
2.2 什么数据可以做key,什么数据可以做value
2.2.1什么数据可以做key
-
并不是所有的数据都可以做key,想成为key,是有要求的,数据必须是可hash的,下面罗列的5种数据类型是可以做字典key的数据类型
- bool
- int
- float
- 字符串
- 元组
-
下面3中数据类型不可以做字典的key
- 列表
- 集合
- 字典
-
凡是可变对象都不可以做字典的key,凡是不可变对象,都可以做字典的key。
-
bool类型的数据只有True和False两个值,虽然他们可以做字典的key,但实践时,你最好不要这样做,会导致古怪的问题,比如下面的代码
int_dict = {
1: '1做key',
True: 'True做key'
}
print(int_dict)
执行代码,输出结果为
{
1: 'True做key'}
是不是很奇怪,明明两个键值对,实际输出却只有一个,而且key从True变成了1,这是怎么一回事?
print(1==True) # 判断1是否与True相等