""" 字典和集合: 字典是一系列由键(key)和值(value)配对组成的元素的集合,在 Python3.7+,字典被确定为有序,而 3.6 之前是无序的,其长度大 小可变,元素可以任意地删减和改变。相比于列表和元组,字典的性能更优,特别是对于查找、添加和删除操作,字典都能在常数时间复杂度内完成。 集合和字典基本相同,唯一的区别,就是集合没有键和值的配对,是一系列无序的、唯一的元素组合。 字典和集合的创建,通常有下面这几种方式: #字典: d1 = {'name':'lijinyu','age':22,'number': 17852365595} 'name','age','number'就是键(key) d2 = dict({'name':'lijinyu','age':22,'number': 17852365595}) d3 = dict([('name','lijinyu'),('age',22),('number',17852365595)]) d4 = dict(name='lijinyu',age=22,number=17852365595) d1 == d2 == d3 == d4 #集合: s1 = {1,2,3} s2 = set([1,2,3]) s1 == s2 python中字典和合集,无论是键还是值,都可以是混合类型 关于字典的元素访问: 字典访问可以直接索引键,如果不存在,就会抛出异常: d1 = {'name':'lijinyu','age':22,'number': 17852365595} print(d1['name']) #--输出lijinyu print(d1['hobby']) #--Traceback (most recent call last): KeyError: 'hobby' 报错 #这个时候就可以用get(key,default)函数来进行索引(如果键不存在,调用get()函数可以返回一个默认值) d1 = {'name':'lijinyu','age':22,'number': 17852365595} print(d1.get('name')) print(d1.get('hobby','null')) #--返回null(默认值可以随意更改) 关于集合的元素访问: *集合并不支持索引操作,因为集合本质是一个哈希表,和列表不一样,所以以下的操作是错误的 s = {1,2,3} print(s[0]) #--Traceback (most recent call last): TypeError: 'set' object does not support indexing #所以想要判断一个元素在不在字典或者合集内,我们可以用 value in dict/set来判断: #字典: d1 = {'name':'lijinyu','age':22,'number': 17852365595} print('name' in d1) #--TRUE print('hobby' in d1) #--False #集合 s = {1,2,5} print(1 in s) #--True 1这个数字在不在1,2,5之内 print(3 in s) #--False 除了创建和访问,字典和集合也支持增、删、改等操作 #字典: d1 = {'name':'lijinyu','age':22,'number': 17852365595} d1['hobby'] = 'ts' #--增加元素'hobby'='ts' d1['birthday'] = '10-17' #--增加元素'birthday'='10-17' 增加元素后字典的顺序是按照abcdefg.... print(d1) d1['age'] = 21 #直接修改'age'对应的值 d1.pop('number')#删除'number'的值 print(d1) #*注意:集合的pop()操作是删除集合中的最后一个元素,但是集合本身是无序的,无法知道会删除哪个元素,使用要谨慎。 #集合 s = {1,2,3} s.add(5) #--增加5到集合 print(s) s.remove(2) #--删除集合里的2 print(s) 实际应用时,我们需要对字典和合集进行排序,比如要取出最大的50对: 字典排序:通常会根据键或值,进行升序降序 d1 = {'b':5,'a':2,'c':1} d1_sorted_by_key = sorted(d1.items(),key=lambda x: x[0]) #--根据字典键的升序排序 print(d1_sorted_by_key) #--[('a', 2), ('b', 5), ('c', 1)] d1_sorted_by_value = sorted(d1.items(),key=lambda x: x[1]) #--根据字典值的升序排序 print(d1_sorted_by_value)#--[('c', 1), ('a', 2), ('b', 5)] #返回的是列表,列表中的每个元素,是由原字典的键和值组成的元组 集合排序:类似元组、列表,直接调用sorted(set)即可 s = {1,6,2,70} print(sorted(s)) #--对集合元素升序排序 字典和集合的性能: 集合使用更高效快速 字典和集合的工作原理: 字典和集合为什么能如此高效,特别是增、删、查操作时? 不同于其他数据结构,字典和集合的内部结构都是一张哈希表 字典:这张表存储了哈希值、键、值,三个元素 集合:哈希表内没有键和值的配对,只有单一的元素 """
以下不能创建一个字典的语句是 A. dic1 = {} B. dic2 = {3:5} C. dic3 = {[1,2,3]:"usetc"} D. dic4 = {(1,2,3):"usetc"}
C不可以,应为c的创建字典语句是列表类型的
list和tuple有什么不同?
简单概括区别:List有(先后)次序,Tuple有(逻辑)结构 1>list是可变的,tuple不可变(tuple没有insert, pop,append方法); 2>定义只有一个元素的tuple的时候,必须加逗号,否则不会被认为是tuple,而被识别为括号(比如,a = (1) 会被识别为数字1,a = (1,)这样才被识别为一个元组,只有一个元素,数字1); 3>元组可以转列表,但不可以转字典(tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple).