# 字典 :字典是另一种可变容器模型,且可存储任意类型对象,是无序的可变序列,保存的内容使用“键-值”对的形式存放
# 字典的创建和删除
# 直接使用{}创建字典 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:
# dictionary = {key1 : value1, key2 : value2 }
# 参数说明 :dictionary表示字典名称 key1、key2、...keyn表示元素的键,必须唯一 value1、value2、...、valuen表示元素的值,不须唯一
# 键一般是唯一的且必须不可变,如果重复最后的一个键值对会替换前面的,值不需要唯一。
import random
dict0 = {'A': 1, 'B': 2, 'C': '3'}
dict1 = {}
dict2 = dict() # 使用dict()方法创建空字典
print('B')
print("字典dict0是:", dict0)
print("字典dict1是:", dict1, "类型是:", type(dict1)) # 和列表和元组一样,也可以创建空字典
print("字典dict2是:", dict2, "类型是:", type(dict2))
# 两种方法通过已有数据快速创建字典
# 第一种 通过映射函数创建字典
# 语法:dictionary = dict(zip(list1, list2)
# 参数说明:dictionary表示字典名称 zip()函数用于将多个列表或元组对应位置的元素组合为元组,并返回包含这些内容的zip对象
# list1:列表用于指定要生成字典的键 list2: 列表用于指定要生字典的值。若list1和list2长度不同,则与最短列表长度相同
# 实例
list1 = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
list3 = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日", "星期八"]
list2 = ["Monday", "Tuesday", "wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
dict3 = dict(zip(list1, list2))
dict4 = dict(zip(list3, list2))
print("字典dict3是:", dict3, "类型是:", type(dict3))
print("字典dict4是:", dict4, "类型是:", type(dict4))
# 第二种 通过给定的“键-值对”创建字典
# 语法:dictionary = dict(key1=value1, key2=value2, ..., keyn=valuen)
# 参数说明 :key1、key2、...keyn表示元素的键,必须唯一,不可变。可以是字符串,数字和元组 value1、value2、...、valuen表示元素的值,可以是人以数据类型,不须唯一
dict5 = dict(星期一='Monday', 星期二='Tuesday', 星期三='wednesday', 星期四='Thursday', 星期五='Friday', 星期六='Saturday', 星期日='Sunday')
print("字典dict5是:", dict5, "类型是:", type(dict5))
# 还可以使用dict对象的fromkeys()方法创建值为空的字典 语法:dictionary = dict.fromkeys(list1) 其中:list1是作为字典的键的列表
list1 = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"] # 作为键的列表
dict6 = dict.fromkeys(list1)
print("字典dict6是:", dict6, "类型是:", type(dict6))
# 还可以通过已经存在的元组和列表创建字典
# 实例 中文元组 英文列表 => 创建一个字典
zhongwen_tuple = ("星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日")
yingwen_list = ["Monday", "Tuesday", "wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
dict7 = {zhongwen_tuple: yingwen_list}
print("字典dict7是:", dict7, "类型是:", type(dict7))
# 删除字典
# 1 使用del语句删除(语法:del dictionary)
# 2 也可以使用字典对象的clear()方法删除字典的全部元素(原字典将变为空字典) 语法:dictionary.clear()
# 3 还可以使用字典对象的pop()删除并返回指定“键”的元素,
# 4 以及使用字典对象的popitem()方法随机删除并且返回字典里一个元素
dict8 = {'name': 'daming', 'age': 9, 'class': 'first', 'address': 'beijing'}
print(dict8)
pop_obj1 = dict8.pop('name') # 删除要删除的键值对,如{'name':'daming'}
print("pop()方法删除的指定“键”的元素是:", pop_obj1, "删除后的字典是:", dict8) # 输出 :daming
pop_obj2 = dict8.popitem() # 随机返回并删除字典中的一对键和值
print("popitem()方法删除的“键”的元素是:", pop_obj2, "删除后的字典是:", dict8)
del dict8['age'] # del可以删字典中单一的键值对
print(dict8)
dict8.clear() # 清空字典所有条目 (删除字典内所有元素)
print(dict8)
del dict8 # 删除字典
# 访问字典
# 第一种方法 通过键访问值 ditionary[key] 注意: 这里的下标不是索引号,而是键
dict8 = {'name': 'daming', 'age': 9, 'Class': 'first', 'address': 'beijing'}
print(dict8)
print(dict8['name']) # 输出键对应的值:daming
# 第二种方法 通过字典对象的get()方法 语法: dictionary.get(key[,default])
# dictionary:字典对象,即要从中获取值的字典 key为指定的键 default为可选项,用于当指定的键不存在时,返回一个默认值,如果省略返回None
obj1 = dict8.get("Class")
obj2 = dict8.get("Class1", "字典没有此选项") # 不存在键时 返回键后面的值(例如"字典没有此选项")
obj3 = dict8.get("Class1") # 不存在键时 返回键后面的值(默认为None)
print(obj1, obj2, obj3)
# 遍历字典 三个方法keys() values() items()
dict8 = {'name': 'daming', 'age': 9, 'Class': 'first', 'address': 'beijing'}
print("keys()方法:")
for i in dict8.keys(): # 返回字典的键
print(i)
print("values()方法:")
for i in dict8.values(): # 返回字典的值
print(i)
print("items()方法:") # 返回值为可遍历的“键-值对”元组列表
for i in dict8.items():
print(i)
for keys, values in dict8.items(): # 此循环可以获取到具体的每个键和值
print(keys, ":", values)
# 添加、修改和删除字典元素
# dict9 = dict(("name", "daming"), ("sex", "男"), ("age", 10), ("Class", "first")) # dict()方法创建字典
dict9 = dict(name="daming", sex="男", age="10", Class="first")
print("字典dict9;", dict9)
dict9["address"] = "beijing" # 添加元素 语法:dictionary[key]=value
print("添加新元素后字典:", dict9)
dict9["name"] = "xiaohong"
print("修改新元素后字典:", dict9) # 修改元素 添加新元素如果“键”已存在,则替换原来的“值”
del dict9["Class"]
print("删除元素后字典:", dict9)
if "class" in dict9: # 可以用if语句判断“键”是否在是在字典中
del dict9["class"]
else:
print("class键值对不存在")
# 字典推导式 使用字典推导式可以快速生成一个字典,表现形式和列表推导式相似
# 实例 生成一个包含5个随机数的字典
dict10 = {i: random.randint(20, 80) for i in range(5)}
print(dict10) # {0: 35, 1: 48, 2: 20, 3: 53, 4: 23}
# 使用字典推导式根据列表生成字典
zhongwen_tuple = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
yingwen_list = ["Monday", "Tuesday", "wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
dict11 = {i: j for i, j in zip(zhongwen_tuple, yingwen_list)} # zip()函数用于将多个列表或元组对应位置的元素组合为元组
print(zip(zhongwen_tuple, yingwen_list))
print(dict11)
# 字典内置函数&方法
# Python字典包含了以下内置函数:
# 1 len(dict) 计算字典元素个数,即键的总数。
tinydict = {'Name': 'Runoob', 'Age': 7};
print("Length : %d" % len(tinydict))
# 2 str(dict) 输出字典可打印的字符串表示。
print("Equivalent String : %s" % str(tinydict))
# 3 type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。
print(type(str(tinydict)))
# Python字典包含了以下内置方法:
# 1 dict.clear() 删除字典内所有元素
# 2 dict.copy() 返回一个字典的浅复制
# 3 dict.fromkeys(seq[, val]) 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
# 4 dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
# 5 dict.has_key(key) 如果键在字典dict里返回true,否则返回false
# 6 dict.items() 以列表返回可遍历的(键, 值) 元组数组
# 7 dict.keys() 以列表返回一个字典所有的键
# 8 dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
# 9 dict.update(dict2) 把字典dict2的键/值对更新到dict里
# 10 dict.values() 以列表返回字典中的所有值
# 11 pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
# 12 popitem() 返回并删除字典中的最后一对键和值。