Dictionary
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
dict1 = {"name":"rollo","age":25,"work":"CEO","hobby":["music","reading","python"]} dict2= {"num1":1,"num2":2,"num3":3,} print(dict1) print(dict2) #执行结果: {'name': 'rollo', 'age': 25, 'work': 'CEO', 'hobby': ['music', 'reading', 'python']} {'num1': 1, 'num2': 2, 'num3': 3}
注意事项:
1.0 Key必须是唯一的,不变的,可以是数字,字符串,元组,但是不是能列表!!!(列表是可变的)
2.0 Values是可变的,所有的类型的数据都可以,当然也可以是列表!!!
3.0 Dictionary 是无序的,因为它是按照hash来存储的,和存储的数据结构有关,所以不能用切片来处理
4.0 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
字典的查找与修改:
dict1 = {"name":"rollo","age":25,"work":"CEO","hobby":["music","reading","python"]} dict2= {"num1":1,"num2":2,"num3":3,} print(dict1["name"]) print(dict2["num2"]) print(dict1) print(dict2) #执行结果: rollo 2 {'name': 'rollo', 'age': 25, 'work': 'CEO', 'hobby': ['music', 'reading', 'python']} {'num1': 1, 'num2': 2, 'num3': 3}
如果用字典里没有的键访问数据,会输出错误如下:
dict1 = {"name":"rollo","age":25,"work":"CEO","hobby":["music","reading","python"]} dict2= {"num1":1,"num2":2,"num3":3,} print(dict1["name"]) print(dict2["num4"]) #执行结果: rollo Traceback (most recent call last): File "E:/python_work/fullstack_s6/week2/day06/dictionary.py", line 10, in <module> print(dict2["num4"]) KeyError: 'num4'
查找所有的键:dict.keys()
dict1 = {"name":"rollo","age":25,"work":"CEO","hobby":["music","reading","python"]} dict2= {"num1":1,"num2":2,"num3":3,} print(dict1.keys()) #所有键 print(dict2.keys()) print(list(dict1.keys())) #所有键转化为列表 print(list(dict2.keys())) print(tuple(dict1.keys())) #所有键转化为元组 print(tuple(dict2.keys())) #执行结果: dict_keys(['name', 'age', 'work', 'hobby']) dict_keys(['num1', 'num2', 'num3']) ['name', 'age', 'work', 'hobby'] ['num1', 'num2', 'num3'] ('name', 'age', 'work', 'hobby') ('num1', 'num2', 'num3')
查找所有的值:dict.values()
dict1 = {"name":"rollo","age":25,"work":"CEO","hobby":["music","reading","python"]} dict2= {"num1":1,"num2":2,"num3":3,} print(dict1.values()) #所有值 print(dict2.values()) print(list(dict1.values())) #所有值转化为列表 print(list(dict2.values())) print(tuple(dict1.values())) #所有值转化为元组 print(tuple(dict2.values())) #执行结果: dict_values(['rollo', 25, 'CEO', ['music', 'reading', 'python']]) dict_values([1, 2, 3]) ['rollo', 25, 'CEO', ['music', 'reading', 'python']] [1, 2, 3] ('rollo', 25, 'CEO', ['music', 'reading', 'python']) (1, 2, 3)
查找所有的键值对:dict.items()
dict1 = {"name":"rollo","age":25,"work":"CEO","hobby":["music","reading","python"]} dict2= {"num1":1,"num2":2,"num3":3,} print(dict1.items()) #所有的键值对 print(dict2.items()) print(list(dict1.items())) #所有键值对转化为列表 print(list(dict2.items())) print(tuple(dict1.items())) #所有键值对转化为元组 print(tuple(dict2.items())) #执行结果: dict_items([('name', 'rollo'), ('age', 25), ('work', 'CEO'), ('hobby', ['music', 'reading', 'python'])]) dict_items([('num1', 1), ('num2', 2), ('num3', 3)]) [('name', 'rollo'), ('age', 25), ('work', 'CEO'), ('hobby', ['music', 'reading', 'python'])] [('num1', 1), ('num2', 2), ('num3', 3)] (('name', 'rollo'), ('age', 25), ('work', 'CEO'), ('hobby', ['music', 'reading', 'python'])) (('num1', 1), ('num2', 2), ('num3', 3))
update方法:原来字典没有的key/value,直接加到原字典;原来的key,value会被更新
dict1 = {"name":"rollo","age":25,"work":"CEO","hobby":["music","reading","python"]} dict2= {"num1":1,"num2":2,"num3":3,"name":"test"} dict1.update(dict2) print(dict1) #执行结果: dict1 = {"name":"rollo","age":25,"work":"CEO","hobby":["music","reading","python"]} dict2= {"num1":1,"num2":2,"num3":3,"name":"test"} dict1.update(dict2) print(dict1)
dict.fromkeys() 方法来创建字典:
fromkeys() 方法语法:
dict.fromkeys(seq[, value])
参数 seq -- 字典键值列表。 value -- 可选参数, 设置键序列(seq)对应的值,默认为 None。
abc = ("a","b","c") dict3 = dict.fromkeys(abc) dict4 = dict.fromkeys(abc,50) print(dict3) print(dict4) #执行结果: {'a': None, 'b': None, 'c': None} {'a': 50, 'b': 50, 'c': 50}
字典的get()方法:
get()方法是用key找出相关的值,返回。如果key不存在,返回默认值。
dict1 = {"name":"rollo","age":25,"work":"CEO","hobby":["music","reading","python"]} dict2= {"num1":1,"num2":2,"num3":3,"name":"test"} a = dict1.get("name") b = dict1.get("kkk",123456) print(a) print(b) print(dict1) #执行结果: rollo 123456 {'name': 'rollo', 'age': 25, 'work': 'CEO', 'hobby': ['music', 'reading', 'python']}
pop() 方法:
Python 字典 pop() 方法删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值
popitem(),随机删除一个值。Python 字典 popitem() 方法随机返回并删除字典中的一对键和值(一般删除末尾对)。
dict1 = {"name":"rollo","age":25,"work":"CEO","hobby":["music","reading","python"]} dict2= {"num1":1,"num2":2,"num3":3,"name":"test"} a1 = dict1.pop("name") b1 = dict2.pop("num5",123) #必须要默认值,不然没有KEY的,就会报错 print(a1) print(b1) print(dict1) #执行结果: rollo 123 {'age': 25, 'work': 'CEO', 'hobby': ['music', 'reading', 'python']}
修改字典:
dict1 = {"name":"rollo","age":25,"work":"CEO","hobby":["music","reading","python"]} dict2= {"num1":1,"num2":2,"num3":3,} dict1["name"] = "google" dict1["work"] = "manager" dict2["num3"] = "Notonly" print(dict1) print(dict2) #执行结果: {'name': 'google', 'age': 25, 'work': 'manager', 'hobby': ['music', 'reading', 'python']} {'num1': 1, 'num2': 2, 'num3': 'Notonly'}
如果原字典没有Key,就会把新加在原来字典后面:
dict1 = {"name":"rollo","age":25,"work":"CEO","hobby":["music","reading","python"]} dict2= {"num1":1,"num2":2,"num3":3,} dict1["name1"] = "google" dict1["work1"] = "manager" dict2["num4"] = "Notonly" print(dict1) print(dict2) #执行结果: {'name': 'rollo', 'age': 25, 'work': 'CEO', 'hobby': ['music', 'reading', 'python'], 'name1': 'google', 'work1': 'manager'} {'num1': 1, 'num2': 2, 'num3': 3, 'num4': 'Notonly'}
dict.setdefault(key,None)
如果有相关的KEY,就返回来的值,
如果没有相关的KEY,就会在原字典加上默认的values,返回默认的值,
dict1 = {"name":"rollo","age":25,"work":"CEO","hobby":["music","reading","python"]} dict2= {"num1":1,"num2":2,"num3":3,} a1 = dict1.setdefault("age",36) a2 = dict1.setdefault("travel","USA") b1 = dict2.setdefault("num1",20) b2 = dict2.setdefault("num5",90) print(a1) print(a2) print(b1) print(b2) print(dict1) print(dict2) #执行结果: 25 #有age,返回age原来的25 USA #没有travel,返回默认值 USA 1 #有num1,返回num1原来的1 90 #没有num5,返回默认值90 {'name': 'rollo', 'age': 25, 'work': 'CEO', 'hobby': ['music', 'reading', 'python'], 'travel': 'USA'} #没有travel,返回默认值 USA,同是在原字典上加上这个键值对 {'num1': 1, 'num2': 2, 'num3': 3, 'num5': 90}#没有num5,返回默认值90,同是在原字典上加上这个键值对
删除字典元素:
del,clear()方法:
dict1 = {"name":"rollo","age":25,"work":"CEO","hobby":["music","reading","python"]} dict2= {"num1":1,"num2":2,"num3":3,} del dict1["hobby"] #删除hobby这组 print(dict1) dict2.clear() #清空字典 del.dict1 #删除速个字典
Python 字典 in 操作符用于判断键是否存在于字典中,如果键在字典 dict 里返回 true,否则返回 false。
而 not in 操作符刚好相反,如果键在字典 dict 里返回 false,否则返回 true。