一、字典的定义
字典和列表一样是可变的容器模型,且可存储任意类型的对象,字典是每个键值对应一个值,对应之间用冒号(:)分割,每个对象之间用(,)分割,整个字典包括在{}中;字典和列表不同,字典的键是唯一的,但值则不必;值可以取任何数据类型,但键值必须是不可变的,如字符串、数字或者元组。
字典的定义
dict = {"name":"Alex","Age":18}
print (dict)
输出:
C:Python35python.exe D:/linux/python/all_test/listandtup.py
{'Age': 18, 'name': 'Alex'}
二、字典的特性
字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。
两个重要的点需要记住:
1、不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
例:
dict = {"name":"Alex","Age":18,"wage":30000,"Class":"16期","name":"huige"} #我们定义了两个name,结果记住的只有最后面的那个值
print(dict) #打印输出
#我们看输出
C:Python35python.exe D:/linux/python/all_test/listandtup.py
{'Class': '16期', 'wage': 30000, 'name': 'huige', 'Age': 18}
2、字典的键值不能用列表充当,因为键值是不可变的,所以只能用数字、字符串、元组来充当
例:
dict = {"name":"Alex",8:18,"wage":30000,"Class":"16期",("name"):"huige"}
print(dict)
dict1 = {["name"]:"huige","hh":5000} #键值有列表
print(dict1)
#看下面报错
C:Python35python.exe D:/linux/python/all_test/listandtup.py
{8: 18, 'name': 'huige', 'wage': 30000, 'Class': '16期'} #第一个字典打印出来了
Traceback (most recent call last):
File "D:/linux/python/all_test/listandtup.py", line 28, in <module>
dict1 = {["name"]:"huige","hh":5000} #第二个字典报错
TypeError: unhashable type: 'list'
三、字典的操作
1、字典的访问
例子:
dict = {"name":"Alex","Age":18,"wage":30000}
print (dict)
print(dict["name"]) #访问字典的name 会输出name 的值
输出:
C:Python35python.exe D:/linux/python/all_test/listandtup.py
{'Age': 18, 'name': 'Alex', 'wage': 30000}
Alex
2、字典的修改
dict = {"name":"Alex","Age":18,"wage":30000}
dict["Age"] = 16 #更改年龄为16岁
dict["School"] = "老男孩教育" #新增加字典的键值
print(dict)
输出如下:
C:Python35python.exe D:/linux/python/all_test/listandtup.py
{'wage': 30000, 'name': 'Alex', 'School': '老男孩教育', 'Age': 16}
3、字典的删除
dict = {"name":"Alex","Age":18,"wage":30000,"Class":"16期"}
del dict["name"] #删除字典的键
print(dict)
dict.clear() #清空字典
print(dict)
dict1 = {"name":"huige","Age":16}
print(dict1)
del dict1 #另一种删除字典的方法,这种办法会连字典也删除 所以无法打印字典 报错
print(dict1)
输出
C:Python35python.exe D:/linux/python/all_test/listandtup.py
{'Age': 18, 'wage': 30000, 'Class': '16期'}
{}
Traceback (most recent call last):
{'Age': 16, 'name': 'huige'}
File "D:/linux/python/all_test/listandtup.py", line 34, in <module>
print(dict1)
NameError: name 'dict1' is not defined
四、字典的内置函数

1、len函数
统计字典元素的个数
例子:
dict = {"name":"Alex",8:18,"wage":30000,"Class":"16期",("name"):"huige"}
print(len(dict))
输出
C:Python35python.exe D:/linux/python/all_test/listandtup.py
4
2、str函数
输出字典可打印字符串的表示
dict = {"name":"Alex",8:18,"wage":30000,"Class":"16期",("name"):"huige"}
print(str(dict))
输出
C:Python35python.exe D:/linux/python/all_test/listandtup.py
{8: 18, 'wage': 30000, 'name': 'huige', 'Class': '16期'}
3、type函数
输出变量类型,如果变量是字典就返回字典类型
dict = {"name":"Alex",8:18,"wage":30000,"Class":"16期",("name"):"huige"}
print(type(dict))
list12 = ["huige","123"]
print(type(list12))
输出 就是来判断类型的
C:Python35python.exe D:/linux/python/all_test/listandtup.py
<class 'dict'>
<class 'list'>
五、字典的方法

1、clear()函数
用于清空字典中所有元素
例:
dict = {"name":"Alex",8:18,"wage":30000,"Class":"16期",("name"):"huige"}
print(dict)
dict.clear() #使用clear函数清空字典
print(dict)
输出
C:Python35python.exe D:/linux/python/all_test/listandtup.py
{8: 18, 'wage': 30000, 'name': 'huige', 'Class': '16期'}
{} #清空后
2、copy函数
用于浅复制一个字典
例子:
dict = {"name":"Alex",8:18,"wage":30000,"Class":"16期",("name"):"huige"}
dict1 = dict.copy()
print("打印字典1:%s" %(dict)) #打印字典dict
print("打印字典2:%s" %(dict1)) #打印字典dict1
# 输出
C:Python35python.exe D:/linux/python/all_test/listandtup.py
打印字典1:{8: 18, 'name': 'huige', 'Class': '16期', 'wage': 30000}
打印字典2:{8: 18, 'name': 'huige', 'wage': 30000, 'Class': '16期'}
copy浅复制的特殊说明
我们直接看例子:
dict = {"name":"Alex","a":{"wage":30000},"Age":18}
print(dict)
dict1 = dict.copy()
print(dict1)
dict["Age"] = 16 #改变了字典dict的年龄
dict["a"]["wage"] = 40000 #改变了字典dict的工资值
print("打印字典1:%s" %(dict))
print("打印字典2: %s" % (dict1))
输出:
C:Python35python.exe D:/linux/python/all_test/listandtup.py
{'Age': 18, 'name': 'Alex', 'a': {'wage': 30000}} #字典工资值没有变
{'Age': 18, 'name': 'Alex', 'a': {'wage': 30000}} #字典工资值没有变
打印字典1:{'Age': 16, 'name': 'Alex', 'a': {'wage': 40000}} #字典1的年龄变了
打印字典2: {'Age': 18, 'name': 'Alex', 'a': {'wage': 40000}} #字典2的年龄没有变
通过例子我们可以看出浅拷贝也是跟着内存走的,这里以后讲到函数了 我们再详细说明
3、formkeys函数
Python 字典 fromkeys() 函数用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值
语法:
dict.fromkeys(seq[, value]))
例子:
seq = ("name","age") dict = dict.fromkeys(seq) #只加了键,并没有加值 print("新字典的键:%s " % (dict)) 输出如下: C:Python35python.exe D:/linux/python/all_test/listandtup.py 新字典的键:{'age': None, 'name': None} seq = ("name","age") #加了键和值 dict = dict.fromkeys(seq,"huige") print("新字典的键:%s " % (dict)) 输出如下: C:Python35python.exe D:/linux/python/all_test/listandtup.py 新字典的键:{'age': 'huige', 'name': 'huige'}
4、get的方法
前面我们在定义字典的时候,就说过如果我们防问了字典里没有的键会报错,那么我们怎么预防呢?或者访问到没有的键时给起指定一个默认的值
那么这里get的方法就用到了
语法:dict.get(key,default=None) #这里备注一下默认为空
实例:
dict = {"name":"Alex","wage":30000,"Class":"16期"}
print(dict)
print(dict["name"]) #字典里有的值
#print(dict["AA"]) #字典里无的值,这里会报错
# 输出如下:
# C:Python35python.exe D:/linux/python/all_test/listandtup.py
# {'wage': 30000, 'Class': '16期', 'name': 'Alex'}
# Traceback (most recent call last):
# File "D:/linux/python/all_test/listandtup.py", line 62, in <module>
# print(dict["AA"]) #字典里无的值,这里会报错
# KeyError: 'AA'
# Alex
print(dict.get("AA"))
print(dict.get("AA","b"))
#如下输出
C:Python35python.exe D:/linux/python/all_test/listandtup.py
{'wage': 30000, 'name': 'Alex', 'Class': '16期'}
Alex
None #后面没有跟值,为空
b #后面跟了b 输出B值
5、in操作符
python 字典 in 操作符用于判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false。
语法: key in dict #key是要在字典中查找的键
例子:
dict = {"name":"Alex","Age":18,"wage":30000,"Class":"16期"}
if "Age" in dict:
print("存在")
else:
print("键值不存在")
if "AA" in dict:
print("键值AA存在")
else:
print("键值AA不存在")
输出
C:Python35python.exe D:/linux/python/all_test/listandtup.py
存在
键值AA不存在
6、items方法
Python 字典 items() 方法以列表返回可遍历的(键, 值) 元组数组
语法:dict.items()
例:
dict = {"name":"Alex","Age":18,"wage":30000,"Class":"16期"}
print(dict.items()) # 所有的值以元组的形式现实
输出
C:Python35python.exe D:/linux/python/all_test/listandtup.py
dict_items([('wage', 30000), ('Class', '16期'), ('Age', 18), ('name', 'Alex')])
7、keys的方法
Python 字典 keys() 方法以列表返回一个字典所有的键
语法:dict.keys()
例子:
dict = {"name":"Alex","Age":18,"wage":30000,"Class":"16期"}
print(dict.keys()) #输出列表所有键的值
输出:
C:Python35python.exe D:/linux/python/all_test/listandtup.py
dict_keys(['name', 'Class', 'wage', 'Age'])
8、setdefault 的方法
Python 字典 setdefault() 方法和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值
例子:
dict = {"name":"Alex","Age":18,"wage":30000,"Class":"16期"}
print ("Age 键的值为 : %s" % dict.setdefault('Age', None))
print ("Sex 键的值为 : %s" % dict.setdefault('Sex', None))
print ("新字典为:", dict)
输出:
C:Python35python.exe D:/linux/python/all_test/listandtup.py
Age 键的值为 : 18
Sex 键的值为 : None
新字典为: {'wage': 30000, 'Sex': None, 'Class': '16期', 'Age': 18, 'name': 'Alex'}
9、update方法
Python 字典 update() 函数把字典dict2的键/值对更新到dict里。
语法:dict.updata(dict2)
例子:
dict = {"name":"Alex","Age":18}
dict1 = {"Class":"16期"}
print(dict)
dict.update(dict1)
print(dict)
输出
C:Python35python.exe D:/linux/python/all_test/listandtup.py
{'name': 'Alex', 'Age': 18} #更新前
{'Class': '16期', 'name': 'Alex', 'Age': 18} #更新后
10、values 的方法
Python 字典 values() 方法以列表返回字典中的所有值
语法:values()方法语法
dict = {"name":"Alex","Age":18,"wage":30000,"Class":"16期"}
print(dict.values()) #返回字典的所有值
输出
C:Python35python.exe D:/linux/python/all_test/listandtup.py
dict_values(['16期', 30000, 18, 'Alex'])
就这样字典就这样结束了