字典dict由键值key-value构成,具有较强的查询检索能力。
基本格式为:
dict={key1:value1,key2:value2,......,keyn,valuen }
1.key由数字、字符串、元组(元素只能为数字或字符串)这三种类型进行构建,但不能用变量、list、tuple进行构建。为什么呢,最后解释。
2.value可以是数字、字符串、元组、已赋值的变量、列表list、集合tuple。
为深入了解字典dict前,我们有必要和list对比一下。以下面C_lists和字典D_lists为例:
我们可以看出:
1. C_lists一旦定义,其长度就固定下来了,不能再增加。C_lists[0]到C_lists[2]有效,而C_lists[3]超界。
2. D_lists定义之后,如果按照key的构建规则继续向D_lists[]里增加key,其数量是可以继续增加的。
3. C_lists是以0开始的有序数列进行读取的,而D_lists是以key对应的value进行读取的。如D_lists['li']的value为15,而字典元素为tuple或list时,其读取规则同元组读取规则是一样的,如D_lists['wang'][1][1]=4。
4. 当dict中key出现重复时,key最终的value以最后一次赋值(出现)为准,并按照第一次key出现的位置输出。
以下代码在Pycharm下测试通过,可对照输出结果进行理解。
#以下开始定义字典,并进行赋值
D_lists={'zhang':('ee',[2,4,5],99999),'li':1000000,'zhang':('ee',[2,4,500],3)}
D_lists['li']=12
D_lists['zhang'][1][1]=77777
D_lists[3]=1
D_lists[('2wwww','w',45)]=2
if 'li' in D_lists:
print(D_lists)
D_lists['zhang']= 1
print(D_lists)
结果输出:
{'zhang': ('ee', [2, 77777, 500], 3), 'li': 12, 3: 1, ('2wwww', 'w', 45): 2}
{'zhang': 1, 'li': 12, 3: 1, ('2wwww', 'w', 45): 2}
现在,我们回过头来回答前面留下的问题,其实就是解释dict中key到时是干什么的:
1. key在功能上是用于检索的,相当于list中的0,1,2,3...等索引。
2. key还可被用来生成内存地址。Python系统会依次对出现的key,以调用Hash哈希函数的方法,转换成有序而不连续的内存地址,并把对应的value放置在此。这就很好理解上面我们看出的第4条内容。
3. Hash哈希函数不能使用变量做其参数生成内存地址。 list、dict以及变量都是可变的,因此,就不能用作参数。如果元组tuple元素仅使用数字或字符串的话,不变的,这时是可以用作key的。但tuple一旦内含了list等变化元素就不可以了。
由于北京疫情,现在不敢在KFC店里喝咖啡了,店外用手机先点,之后取走,露天喝!