今天继续对dict类进行研究
一、删除dict对象中的所有元素
dictname.clear()
此方法将删除dict对象中的全部元素,但字典对象本身还在。
二、关于建立dict的副本,即创建一个dict对象的复制品。
与之前学习到的list的副本创建一样,也分为两种情况:
一种是创建dict的副本后,两个对象指向内存中的同一个地址,修改两个dict对象中的任意一个,都会同时修改两个dict对象的内容。
另一种是创建dict的副本之后,两个对象有各自独立的内存地址,修改其中任意一个dict对象都一会对另一个dict对象有影响。
我的理解是,第一种创建副本方法称之为:浅复制
第二种创建副本的方法称之为:深复制
1浅复制
直接赋值
新字典对象=原有字典对象
2 深复制
新字典对象=原有字典对象.copy()
例:
>>> print(dictA)
{'姓名': '李四', '性别': '男', '身高': '180', '体重': '74', '职业': '经理', '爱好': '书法'}
>>> dictB=dictA #浅复制
>>> print(dictA)
{'姓名': '李四', '性别': '男', '身高': '180', '体重': '74', '职业': '经理', '爱好': '书法'}
>>> print(dictB)
{'姓名': '李四', '性别': '男', '身高': '180', '体重': '74', '职业': '经理', '爱好': '书法'}
>>> dictB['姓名']='张三'
>>> print(dictB)
{'姓名': '张三', '性别': '男', '身高': '180', '体重': '74', '职业': '经理', '爱好': '书法'}
>>> print(dictA)
{'姓名': '张三', '性别': '男', '身高': '180', '体重': '74', '职业': '经理', '爱好': '书法'}
>>> dictC=dictA.copy() #深复制
>>> print(dictC)
{'姓名': '张三', '性别': '男', '身高': '180', '体重': '74', '职业': '经理', '爱好': '书法'}
>>> dictC['性别']='女'
>>> print(dictC)
{'姓名': '张三', '性别': '女', '身高': '180', '体重': '74', '职业': '经理', '爱好': '书法'}
>>> print(dictA)
{'姓名': '张三', '性别': '男', '身高': '180', '体重': '74', '职业': '经理', '爱好': '书法'}
三、补充一种创建一个字典对象的方法:通过dict类的共享方法fromkeys()来创建
新的字典变量=dict.fromkeys(tplKeys[,oneValue])
等号右边dict是dict类名(或也叫命名空间?)
fromkeys是类dict中的一个未经实例化就可使用的共享方法(python中是否是这样称呼的?)
参数tplkeys是一个包含所有需要用到的key名称作为元素组成的元组。
可选参数oneValue如果不指定,那么新建的字典的所有元素中每个key对应的value都是None
如果指定oneValue,则表示每个key的value都一样,都是参数oneValue表示的值。
例:
>>> tplKey=('张三的成绩','李四的成绩','孤荷凌寒的成绩')
>>> dictA=dict.fromkeys(tplKey)
>>> dictC=dict.fromkeys(tplKey,90)
>>> print(dictA)
{'张三的成绩': None, '李四的成绩': None, '孤荷凌寒的成绩': None}
>>> print(dictC)
{'张三的成绩': 90, '李四的成绩': 90, '孤荷凌寒的成绩': 90}
四、读取字典中指定key名称元素的value
1 第一种方法,直接访问读取
字典对象[keyname]
将直接返回对应keyname名称的元素的value.
当没有在字典中找到对应的keyname名称的元素时,将产生错误!
2第二种方法,使用字典对象的get方法
字典对象.get(keyname[,default=None])
参数 keyname是指字典元素中的键名;
可选参数default=None,表示 如果在字典中没有找到对应keyname名称的元素时,就返回此defalut参数指定的默认值。
此可选参数并不是关键字参数,书写时不能如格式上那样写成:default=None这样的格式,而比如说应当只能写None.
此时不会报错。
3 第三种方法,使用字典对象的setdefault方法
字典对象.setdefault(keyname[,default=None])
经实际测试,此方法与get方法没有区别。
唯一的不同在于:
如果在字典对象中没有找到对应的keyname名称的元素——
get方法只是返回可选参数default指定的value值,但不会对字典对象的内容作任何修改。
setdefault方法在返回可选参数default指定的value值后,还会将新指定的keyname添加到字典中去,并设置对应value为default指定的value值。
测试:
>>> print(dictC)
{'张三的成绩': 90, '李四的成绩': 90, '孤荷凌寒的成绩': 90}
>>> intVale=dictC['张三的成绩']
>>> print(intVale)
90
>>> intValue=dictC['王五的成绩']
Traceback (most recent call last):
File "", line 1, in
intValue=dictC['王五的成绩']
KeyError: '王五的成绩'
>>> intValue=dictC.get('王五的成绩')
>>> print(intValue)
None
>>> intValue=dictC.get('王五的成绩',99)
>>> print(intValue)
99
>>> print(dictC)
{'张三的成绩': 90, '李四的成绩': 90, '孤荷凌寒的成绩': 90}
>>> intValue=dictC.setdefault('王五的成绩',100)
>>> print(intValue)
100
>>> print(dictC)
{'张三的成绩': 90, '李四的成绩': 90, '孤荷凌寒的成绩': 90, '王五的成绩': 100}
五、吞并另一个字典的所有元素
字典对象的update()方法可以将另一个字典的所有元素追加到自己的末尾。
当前字典.update(另一个字典)
执行此方法后,当前字典的元素增加,所增加的元素为另一个字典中的全部元素。而另一个字典的内容没有任何变化。
如果存在两个字典的部分元素的key值相同,则用另一个字典中的同名的key值元素的value来覆盖当前字典。
测试:
>>> print(dictC)
{'张三的成绩': 90, '李四的成绩': 90, '孤荷凌寒的成绩': 90, '王五的成绩': 100}
>>> dictD={'孤荷凌寒的成绩': 75,'赵六的成绩':85}
>>> dictC.update(dictD)
>>> print(dictC)
{'张三的成绩': 90, '李四的成绩': 90, '孤荷凌寒的成绩': 75, '王五的成绩': 100, '赵六的成绩': 85}
六、获取字典的嵌套元组列表方式的表示形式
测试:
>>> print(dictC)
{'张三的成绩': 90, '李四的成绩': 90, '孤荷凌寒的成绩': 75, '王五的成绩': 100, '赵六的成绩': 85}
>>> lstC=dictC.items()
>>> print(lstC)
dict_items([('张三的成绩', 90), ('李四的成绩', 90), ('孤荷凌寒的成绩', 75), ('王五的成绩', 100), ('赵六的成绩', 85)])
七、获取字典中所有元素的key,并作为列表返回
dictname.keys()
此方法将返回字典中所有元素的key组成的一个列表对象。
测试:
>>> dictTemp={'姓名': '李四', '性别': '男', '身高': '180', '体重': '74', '职业': '经理', '爱好': '书法'}
>>> print(dictTemp)
{'姓名': '李四', '性别': '男', '身高': '180', '体重': '74', '职业': '经理', '爱好': '书法'}
>>> lstKey=dictTemp.keys()
>>> print(lstKey)
dict_keys(['姓名', '性别', '身高', '体重', '职业', '爱好'])
八、获取字典中的所有元素的value,并作为一个列表返回
dictname.values()
此方法将返回字典中所有元素的value组成的一个列表对象.
测试:
>>> print(dictTemp)
{'姓名': '李四', '性别': '男', '身高': '180', '体重': '74', '职业': '经理', '爱好': '书法'}
>>> lstValue=dictTemp.values()
>>> print(lstValue)
dict_values(['李四', '男', '180', '74', '经理', '书法'])
九、将第七、八点获取到的key列表和value列表又重新组合成字典
要通过zip函数将两个列表进行表格生成后,再使用dict函数转换为字典。
具体做法测试如下 :
>>> print(lstKey)
dict_keys(['姓名', '性别', '身高', '体重', '职业', '爱好'])
>>> print(lstValue)
dict_values(['李四', '男', '180', '74', '经理', '书法'])
>>> dictNew=dict(zip(lstKey,lstValue)) #这是真正执行此操作的语句
>>> print(dictNew)
{'姓名': '李四', '性别': '男', '身高': '180', '体重': '74', '职业': '经理', '爱好': '书法'}
欢迎联系我加入倡导终身学习终身成长的社群——
就是要学社群www.941xue.com/index.aspx