一、字典的定义
字典和列表一样是可变的容器模型,且可存储任意类型的对象,字典是每个键值对应一个值,对应之间用冒号(:)分割,每个对象之间用(,)分割,整个字典包括在{}中;字典和列表不同,字典的键是唯一的,但值则不必;值可以取任何数据类型,但键值必须是不可变的,如字符串、数字或者元组。
字典的定义
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'])
就这样字典就这样结束了