字典的创建格式如下
d= {key1: value1 , key2:value2}字典由多个键及其对应的值构成的对组成(把键/值对称为项)。字典的每个键/值对用冒号(:)分割,每个项之间用逗号(,)分割,整个字典包括在花括号({})中 键必须是唯一的,但值不必。值可以取任何数据类型,键必须是不可变的,如字符串,数字或元组
可以用dict函数通过其他映射或键/值序列对建立字典
>>> students={('name','小明'),('number','250')} >>> a=dict(students) >>> print('学生详细信息: ',a) 学生详细信息: {'name': '小明', 'number': '250'} >>> >>> print('学生姓名:',a['name']) 学生姓名: 小明 >>> print('学号:',a['number']) 学号: 250dict函数可以通过关键字参数创建字典
>>> a=dict(name='小黑',number='252') >>> print('学生详细信息,',a) 学生详细信息, {'name': '小黑', 'number': '252'}1.修改字典 向字典添加新内容的方法是增加新键/值对,例如
>>> student={'小明':'250','小黑':'252'} >>> student['小黑']='251' #修改小黑的学号 >>> print('小黑的学号是:%(小黑)s'%student) #注意这里的转义方式 小黑的学号是:251 #修改成功 >>> student['小白']='253' #添加新学生 >>> print('小白的学号是:%(小白)s'%student) 小白的学号是:253 #添加成功2.删除字典元素 使用del命令
>>> student {'小明': '250', '小黑': '251', '小白': '253'} >>> del student['小明'] #删除 小明 的键 >>> student {'小黑': '251', '小白': '253'}除了删除键以外,还可以删除整个字典
>>> del student >>> student Traceback (most recent call last): File "<pyshell#50>", line 1, in <module> student NameError: name 'student' is not defined执行del之后无法再访问原来的字典,因为字典已经不存在了
3.字典的特性 (1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后面的值会被记住
>>> student={'小黑':'520','小明':'250','小白':'521','小白':'620'} >>> student {'小黑': '520', '小明': '250', '小白': '620'}(2)键必须不可变,可以用数字,字符串或元组充当,不能用列表
>>> a={['name']:'小A','number':'25000'} Traceback (most recent call last): File "<pyshell#55>", line 1, in <module> a={['name']:'小A','number':'25000'} TypeError: unhashable type: 'list'由上,不能用列表做键,否则会提示类型错误
4.len函数 len(dict)函数用于计算字典元素的个数,即键的总和
>>> student {'小黑': '520', '小明': '250', '小白': '620'} >>> len(student) 35.type函数 type(variable)函数返回输入的变量类型,如果输入的变量是字典,就返回字典类型
>>> student {'小黑': '520', '小明': '250', '小白': '620'} >>> type(student) <class 'dict'字典的格式化方法是在每个转化说明符中的%字符后加上用圆括号括起来的键,再跟上其他元素说明
>>> print('小黑的学号是:%(小黑)s'%student) #注意这里的转义方式 小黑的学号是:251dict的特点是: (1)查找和插入的速度极快,不会随着key的增加而变慢 (2)需要占用大量内存,内存浪费很多
list的特点是: (1)查找和插入时间随着元素的增加而增加 (2)占用空间少,浪费内存很少
***dict内部存放的顺序和键放入的顺序没有关系
1.clear 用于删除字典内的所有项
dict.clear()该方法不需要参数。该函数是一个原地操作(类似于list.sort)函数,没有任何返回值(返回值为None)
>>> student.clear() >>> student {} >>> print('元素个数为:',len(student)) 元素个数为: 0字典调用clear后整个字典内所有项都被删除
>>> x={} >>> y=x >>> x['key']='value' >>> y {'key': 'value'} >>> x={} >>> y {'key': 'value'} >>> x={} >>> y=x >>> x['key']='value' >>> x.clear() >>> y {}两个示例中,x和y最初对应同一个字典,示例1中通过将x关联到一个新的空字典对它重新赋值,这对y没有任何影响,还关联到原先的字典。若想清空原始字典的所有元素,则必须使用clear方法,使用clear后,y的值也被清空了
2.copy 返回一个具有相同键/值对的新字典。这个方法是浅复制,因为值本身是相同的,而不是副本。
dict.copy该方法不需要参数。返回结果为一个字典的浅复制 浅复制:
>>> student={'小明':'250','info':['小黑','小白','man']} >>> st=student.copy() >>> st['小明']='2500' >>> st {'小明': '2500', 'info': ['小黑', '小白', 'man']} >>> student {'小明': '250', 'info': ['小黑', '小白', 'man']} >>> st['info'].remove('man') >>> st {'小明': '2500', 'info': ['小黑', '小白']} >>> student {'小明': '250', 'info': ['小黑', '小白']}由输出结果看到,替换副本的值时原始字典不受影响,如果修改了某个值(原地修改,不是替换),原始字典就会改变,因为同样的值也在原字典中,以这种方式复制就是浅复制
3.fromkeys 用于创建一个新字典
dict.fromkeys(seq[,value])此语法中,dict代表指定字典,seq代表字典键值列表,value代表可选参数,设置键序列(seq)的值,该方法返回结果为列表。
>>> seq=('name','age','lover') >>> info=dict.fromkeys(seq) >>> print('新的字典为:%s'%info) 新的字典为:{'name': None, 'age': None, 'lover': None} >>> info = dict.fromkeys(seq,10) >>> print('新的字典为:%s'%info) 新的字典为:{'name': 10, 'age': 10, 'lover': 10}由输出结果看出,fromkeys方法使用给定的键建立新字典,每个键默认对应的值为None
4.get 返回指定键的值如果值不在字典中,就返回默认值
dict.get(key,default=None)key代表字典中要查找的键,default代表指定键的值不存在时返回默认值。该方法返回结果为指定键的值,如果值不在字典中,就返回默认值
>>> student={'小黑':'100','小白':'200'} >>> print('小黑%s'%student.get('小黑')) 小黑100 >>> st={} >> print(st['name']) Traceback (most recent call last): File "<pyshell#94>", line 1, in <module> print(st['name']) KeyError: 'name' >>> print(st.get('name')) None >>> print(st.get('name','未找到匹配项')) 未找到匹配项由输出结果可以看到,以其他方式访问字典中不存在的元素的时候会报错。而以get访问时会返回None或者返回自定义的默认值
5.key in dict 用于判断键是否存在于字典中,如果键在字典中返回True,否则返回False
key in dict >>> student={"小黑":'150','小白':'151'} >>> print('检查小黑是否在字典中:%s'%('小黑'in student)) 检查小黑是否在字典中:True >>> print('检查小明是否在字典中:%s'%('小明'in student)) 检查小明是否在字典中:False6.items() 用于列表返回可遍历的(键/值)元组数组
dict.items()不需要参数
>>> print(student.items()) dict_items([('小黑', '150'), ('小白', '151')])由输出结果看到,返回结果为一个元组数组
7.keys 用于返回一个字典的所有键
dict.keys()不需要传参
>>> student {'小黑': '150', '小白': '151'} >>> print(student.keys()) dict_keys(['小黑', '小白'])返回值为一个元组数组,数组中包含字典中的所有键
8.setdefault 用于获得与给定键相关联的值,如果键不存在于字典中,就会添加键并将值设为默认值
dict.setdefault(key,degult=None)default代表键不存在时设置的默认键值,该方法没有任何返回值
>>> student {'小黑': '150', '小白': '151'} >>> print('小黑的键值为:%s'%student.setdefault('小黑')) 小黑的键值为:150 >>> print('小明的键值为:%s'%student.setdefault('小明')) 小明的键值为:None >>> print('student字典新值为:%s'%student) student字典新值为:{'小黑': '150', '小白': '151', '小明': None}由输出结果看到,当键不存在时,setdefault方法返回默认值并更新字典,如果键存在,就返回与其对应的值,不改变字典,和get一样,默认值可以选择,如果不设定就使用None
>>> student {'小黑': '150', '小白': '151'} >>> student.setdefault('小明','250') '250' >>> student {'小黑': '150', '小白': '151', '小明': '250'}9.update 用于把字典dict2的键/值对更新到dict里
dict.update(dict2)该方法没有任何返回值
>>> student {'小黑': '150', '小白': '151', '小明': '250'} >>> student2={'小明':'250'} >>> student.update(student2) >>> student {'小黑': '150', '小白': '151', '小明': '250'} >>> student3={'小明':'251'} >>> student.update(student3) #对相同项覆盖 >>> student {'小黑': '150', '小白': '151', '小明': '251'}10.values 以列表形式返回字典中的所有值。与返回键的列表不同,返回的列表中可以包含重复的元素
dict.values()该方法不需要参数 返回结果为字典中的所有值
>>> student {'小黑': '150', '小白': '151', '小明': '251'} >>> student.values() dict_values(['150', '151', '251']) >>> list(student.values()) ['150', '151', '251'] >>>