前言

本文承接上文

字典

字典(dict)是一种无序的、可变的序列,它的元素以“键值对(key-value)”的形式存储。相对地,列表(list)和元组(tuple)都是有序的序列,它们的元素在底层是挨着存放的。

而字典和列表最大的不同在于

  1. 列表可以存储大量的数据类型,但是如果数据量大的话,他的查询速度比较慢。
  2. 列表只能按照顺序存储,数据与数据之间关联性不强。

而这里需要引入一个概念,什么数据类型是可变的

  1. ​ 不可变(可哈希)的数据类型:int,str,bool,tuple。
  2. ​ 可变(不可哈希)的数据类型:list,dict,set。

而字典作为python中的映射类型,他是以{}括起来,里面的内容是以键值对的形式储存的:

​ Key: 不可变(可哈希)的数据类型.并且键是唯一的,不重复的。

​ Value:任意数据(int,str,bool,tuple,list,dict,set)

哈希(hash)这个概率后面会提,这里先当一个概念知道就行

而映射关系大概和下图相似:

mark

字典的主要特征:

主要特征 解释
通过键而不是通过索引来读取元素 字典类型有时也称为关联数组或者散列表(hash)。它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。
字典是任意数据类型的无序集合 和列表、元组不同,通常会将索引值 0 对应的元素称为第一个元素,而字典中的元素是无序的。
字典是可变的,并且可以任意嵌套 字典可以在原处增长或者缩短(无需生成一个副本),并且它支持任意深度的嵌套,即字典存储的值也可以是列表或其它的字典。
字典中的键必须唯一 字典中,不支持同一个键出现多次,否则只会保留最后一个键值对。
字典中的键必须不可变 字典中的值是不可变的,只能使用数字、字符串或者元组,不能使用列表。

Python 中的字典类型相当于 Java 或者 C++ 中的 Map 对象。

字典的创建

1.使用{}创建字典

#使用字符串作为key
scores = {'数学': 95, '英语': 92, '语文': 84}
print(scores)
#使用元组和数字作为key
dict1 = {(20, 30): 'bad', 30: [1,2,3]}
print(dict1)
#创建空元组
dict2 = {}
print(dict2)

运行结果为

{'数学': 95, '英语': 92, '语文': 84}
{(20, 30): 'bad', 30: [1, 2, 3]}
{}

从上面的例子也可以看出字典里的键可以是整数、字符串或者元组,只要符合唯一和不可变的特性就行;字典的值可以是 Python 支持的任意数据类型。

2.使用 dict()函数来创建字典

每一个参数都是一个键值对,参数名就是键,参数名就是值(这种方式创建的字典,key都是字符串)

d = dict(name='孙悟空',age=18,gender='男')
print(d)

运行结果为

{'name': '孙悟空', 'age': 18, 'gender': '男'}

也可以将一个包含有双值子序列的序列转换为字典
双值序列,序列中只有两个值,[1,2] (‘a’,3) ‘ab’
子序列,如果序列中的元素也是序列,那么我们就称这个元素为子序列

例如

d = dict([('name','孙悟空'),('age',18)])
print(d , type(d))

运行结果为

{'name': '孙悟空', 'age': 18} <class 'dict'>

字典的使用

增加操作

1.直接增加

d = dict([('name','孙悟空'),('age',18)])
print(d )
d['address'] = '花果山' # 向字典中添加key-value
print(d)

运行结果为

{'name': '孙悟空', 'age': 18}
{'name': '孙悟空', 'age': 18, 'address': '花果山'}

2.通过setdefault来增加

setdefault语法

dict.setdefault(key[, default])

如果key已经存在于字典中,则返回key的值,不会对字典做任何操作
如果key不存在,则向字典中添加这个key,并设置value

d = dict([('name','孙悟空'),('age',18)])
print(d)
result = d.setdefault('name','猪八戒')
result = d.setdefault('hello','猪八戒')
print(d)

运行结果为

{'name': '孙悟空', 'age': 18}
{'name': '孙悟空', 'age': 18, 'hello': '猪八戒'}

删除操作

1.删除字典

和列表还有元组一致,也是使用del关键字删除字典

d = dict([('name','孙悟空'),('age',18)])
print(d)
del d
print(d)

运行结果为

{'name': '孙悟空', 'age': 18}
Traceback (most recent call last):
File "E:/code/python/test.py", line 4, in <module>
print(d)
NameError: name 'd' is not defined

2.删除一个key

有pop和popitem两种方法

pop是指定删除一个key

popitem是随机删除一个key

pop()这个方法在说列表的时候其实我们已经用到过了

d = dict([('name','孙悟空'),('age',18)])
print(d)
d.pop("name")
print(d)

运行结果为

{'name': '孙悟空', 'age': 18}
{'age': 18}

popitem()

d = dict([('name','孙悟空'),('age',18)])
print(d)
d.popitem()
print(d)

运行结果为

{'name': '孙悟空', 'age': 18}
{'name': '孙悟空'}

3.清空字典

clear()这个方法在说列表的时候其实我们已经用到过了

d = dict([('name','孙悟空'),('age',18)])
print(d)
d.clear()
print(d)

运行结果为

{'name': '孙悟空', 'age': 18}
{}

修改操作

1.直接修改

d = dict([('name','孙悟空'),('age',18)])
print(d)
d["name"]="猪八戒"
print(d)

运行结果为

{'name': '孙悟空', 'age': 18}
{'name': '猪八戒', 'age': 18}

2.通过update修改

d = dict([('name','孙悟空'),('age',18)])
print(d)
d.update({"name":"猪八戒"})
print(d)

运行结果为

{'name': '孙悟空', 'age': 18}
{'name': '猪八戒', 'age': 18}

查找操作

1.直接查找

d = dict([('name','孙悟空'),('age',18)])
print(d)
print(d["name"])

运行结果为

{'name': '孙悟空', 'age': 18}
孙悟空

2.通过get查找

d = dict([('name','孙悟空'),('age',18)])
print(d)
v=d.get("name")
print(v)

运行结果为

{'name': '孙悟空', 'age': 18}
孙悟空

3.查找key

d = dict([('name','孙悟空'),('age',18)])
print(d)
v=d.keys()
print(v)

运行结果为

{'name': '孙悟空', 'age': 18}
dict_keys(['name', 'age'])

4.查找value

d = dict([('name','孙悟空'),('age',18)])
print(d)
v=d.values()
print(v)

运行结果为

{'name': '孙悟空', 'age': 18}
dict_values(['孙悟空', 18])

本文到此结束,下文静等更新…(未完待续)

说明一下,在字符串,列表,字典,他们自身带有的方法太多了,这里限于篇幅是不可能一一写完的,很多方法可能都没有写到,想要更多方法的具体使用细节,可以自行查找相关资料

(下文更新集合和hash)

感谢你的阅读