什么是字典?
字典是另一种可变容器模型,且可存储任意类型对象。
典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中
格式如下:
d = {key1 : value1, key2 : value2 }
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
注意:
(1). 同一个键不能出现两次,如果一个键被赋值两次,后边的键值会被记下,而前边的键值会被覆盖
(2). 键必须不可变,所以可以用数字,字符串或元组充当,列表不可以
创建字典的几种方式:
# 方式1. 创建一个空字典 dic = {} # 方式2. 通过赋值创建 dic = {"one":"小明","two":"小李","three":"小马"} print(dic) # {'one': '小明', 'two': '小李', 'three': '小马'} # 方式3 通过dict()函数和关键字参数创建 dic = dict(one="小明",two="小李",three="小马") print(dic) # {'one': '小明', 'two': '小李', 'three': '小马'} # 方式4 通过二元列表创建 dic = [("one","小明"),("two","小李"),("three","小马")] print(dic) # [('one', '小明'), ('two', '小李'), ('three', '小马')] # 方式5 dict和zip结合创建 dic = dict(zip(["one","two","three"],["小明","小李","小马"])) print(dic) # {'one': '小明', 'two': '小李', 'three': '小马'} # 方式6 : 字典推导式 dic = {str(i) : i*2 for i in range(9)} print(dic) # {'0': 0, '1': 2, '2': 4, '3': 6, '4': 8, '5': 10, '6': 12, '7': 14, '8': 16} # 方式7 通过dict.fromkeys()创建 dic = dict.fromkeys("abcd","小明") print(dic) # {'a': '小明', 'b': '小明', 'c': '小明', 'd': '小明'} # 方式8 通过切片拿值创建 list = ["one","小明","two","小李","three","小马"] dic = dict(zip(list[::2],list[1::2])) print(dic) # {'one': '小明', 'two': '小李', 'three': '小马'}
字典的常用方法
增:
# 1). 直接增加 dict = {"name":"小明","age":18} dict["height"] = 180 # 如若字典内没有'height'这个键,则自动增加键值对 print(dict) # {'name': '小明', 'age': 18, 'height': 180}
# 2). 通过'setdefault()'增加 dict = {"name":"小明","age":18} dict.setdefault("height",180) # 如果没有该键,则自动增加键值对 print(dict) # {'name': '小明', 'age': 18, 'height': 180} dict.setdefault("name","小马") # 如果有该键,则不变 print(dict) # {'name': '小明', 'age': 18, 'height': 180} # 返回返回值: re = dict.setdefault("name") # 有该键并且有值的情况下,返回值 print(re) # 小明
删:
# 1). pop()通过key删除字典的键值对,有返回值,可设置返回值 dict = {"name":"小明","age":18} re = dict.pop("name") print(re) # 小明 re1 = dict.pop("name","小马") # 设置返回值 print(re1) # 小马
# 2). popitem(): 删除最后一个键值对,有返回值 dict = {"name":"小明","age":18} print(dict) # {'name': '小明', 'age': 18} re = dict.popitem() print(re) # ('age', 18)
# 3). clear(): 清空字典 dict = {"name":"小明","age":18} print(dict) # {'name': '小明', 'age': 18} dict.clear() print(dict) # {} # 删除整个字典(返回变量类型): del dict print(dict) # <class 'dict'>
改:
# 1). 通过键值对直接更改 dict = {"name":"小明","age":18} print(dict) # {'name': '小明', 'age': 18} dict["name"] = "小马" print(dict) # {'name': '小马', 'age': 18} # 2). update(): 可通过键对值进行更改,如若没有该键,则总动添加 dict = {"name":"小明","age":18} print(dict) # {'name': '小明', 'age': 18} dict.update(name="小马",age=18) print(dict) # {'name': '小马', 'age': 18} dict.update([("height",18),("weight",120)]) print(dict) # {'name': '小马', 'age': 18, 'height': 18, 'weight': 120} dict1 = {"name": "小明", "age": 18, "height": 18, "weight": 120} dict2 = {"name":"小马","age":17,"hobby":"play a game"} print(dict1) # {'name': '小明', 'age': 18, 'height': 18, 'weight': 120} print(dict2) # {'name': '小马', 'age': 17, 'hobby': 'play a game'} dict1.update(dict2) # 使用'dict2'对'dict1'进行更改 print(dict1) # {'name': '小马', 'age': 17, 'height': 18, 'weight': 120, 'hobby': 'play a game'}
查:
# 1). 通过键查询(如若没有该键,则直接报错) dict = {"name": "小马", "age": 17, "height": 18, "weight": 120, "hobby": "play a game"} print(dict["name"]) # 小马 # 2). get() : 通过键查询值,有返回值。如果没有该键,则返回None dict = {"name": "小马", "age": 17, "height": 18, "weight": 120, "hobby": "play a game"} re = dict.get("name") print(re) # 小马 re1 = dict.get("name1") print(re1) # None # 3). keys() : 返回字典内所有的键 dict = {"name": "小马", "age": 17, "height": 18, "weight": 120, "hobby": "play a game"} print(dict.keys()) # dict_keys(['name', 'age', 'height', 'weight', 'hobby']) # 4). values() : 返回字典内所有的值 dict = {"name": "小马", "age": 17, "height": 18, "weight": 120, "hobby": "play a game"} print(dict.values()) # dict_values(['小马', 17, 18, 120, 'play a game']) # 5). items() : 返回字典内所有的键值对 dict = {"name": "小马", "age": 17, "height": 18, "weight": 120, "hobby": "play a game"} print(dict.items()) # dict_items([('name', '小马'), ('age', 17), ('height', 18), ('weight', 120), ('hobby', 'play a game')])