python深入之元组与列表和字典的区别和比较、使用字典注意事项、字典存在意义、字典批量修改和查询

关于元组与列表的区别和比较

(1)区别:列表可变有序,元组不可变有序,且定义单个数据的元组时,不能直接在小括号中填一个数字,要加逗号,即a = (1,),来区分正常的给数字加括号的情况,典可变无序

(2)比较:使用cmp()时可以比较元组和列表,需要注意的是,由于比较的是两种不同类型的对象,这里比较的是元组和列表的本身标识,即tuple和list这两个字符串,所以不管内容如何变,始终是元组大于列表。与字典的比较同理

关于使用字典注意事项(重点)

(1)键不可重复

(2)键要使用不可变类型

(3)不可变类型:定义一个对象时,系统会分配一块内存,并将其地址赋值给该对象,如果改变该对象的值,其对应的内存地址发生改变,则该对象是不可变类型,如数值、布尔、字符等;如果内存地址不变,则是可变类型,如字符串、列表、元组和可变字典等。这里可以通过id()函数进行查看对象对应的内存地址

(4)以上注意事项的原因--字典元素的存储和获取:通过哈希变换进行存储和获取。首先,字典会形成一个存储元素的表格,并为每个单元格标上索引。存储时,字典通过哈希函数将键经过计算变成某个单元格的索引,然后把对应的值存储到该索引对应的单元格中;获取时,将键按照同样的哈希规则计算为某个单元格索引,再从该索引对应的单元格中取出值。那么,如果键重复了,通过计算会得到相同的索引,存储时后面的值就会将先前的值给覆盖;如果键是可变类型,同一个键会计算出不同的索引,获取时就会出错。

关于字典存在意义

(1)在不知道具体内容时,字典较之字符串、列表和元组在进行查询时更加具有实用性,因为前三者只能使用下表索引进行查询,但并不知道查询到的值的具体意义,而字典通过键来查询相应的值,键即可给出值的意义

(2)在大规模数据中进行查询操作时,字符串、列表和元组等会从头到尾进行遍历和比对,并且查询多个值时会重复上述操作,而使用字典则可以大大提升查询效率,只需要根据键,就可以找到对应的值,这和汉语字典在前面弄上偏旁和笔画是一样的道理

扫描二维码关注公众号,回复: 2349604 查看本文章

字典批量修改和查询

(1)批量修改:使用update方法即可,即olddict.update(newdict),注意,字典只能修改值,不能修改键

(2)查询:获取所有键dict.keys(),获取所有值dict.values(),获取所有键值对dict.items(),这里需要区分python2和python3中着三个方法的不同。python2中得出的是三个列表,如果在使用了这三个方法后,再对字典进行修改,那么,重新输出三个结果并不会随着字典的改变而改变,因为三个方法执行完之后,得到的结果和字典没有任何联系,只是固定的三个列表值;python3中则不同,使用了这三个方法后,如果改变字典,那么结果也会随之改变,因为在python3中这三个方法得到的不再是列表,而是字典结构视图,而这个结构视图的特点就是会跟随着字典的改变而改变

(3)虽然在python3中三个获取方法得到的是字典结构视图,不是列表,但是也可以进行遍历,或者利用list()函数转化为列表

猜你喜欢

转载自blog.csdn.net/zx870121209/article/details/81141753
今日推荐