字典详解以及代码块和小数据库

S17_Day5

一、字典

键值对数据: 键取得是不可变得数据类型,,即可哈希的

​           是随意的 ,即不了哈希的

不可变数据类型:(可哈希)

# 数字 字符串 元组 布尔值

可变数据类型:(不可哈希)

#列表 字典​​

字典是无序的,但是py36是有序打印的,3.5及以下版本是无序打印​

​字典里的键必须保证是唯一的

增加:

1.dic = {}

dic[' '] = ' '                        #很暴力,直接添加就好了.#如果这个键不在字典中就是添加,在字典中就是修改

2.dic.setdefault(' 键',' 值') #如果在列表中键存在就不进行添加​​,不存在进行添加.如果不写值就默认值为None

删除:

#字典中没有remove()方法 注意!!!!!!!!!!!!!!!!!

.pop(键)​                 #删除这个键所对应的键值对,有返回值 #返回这个键所对应的值

.popitem()              #随机删除,在3.6版本以上删除最后一个,3.5及以下版本随机删除有返回值 #返回的是这个键所对应的键值对,一元组的形式输出.第一个是键,第二个是值

del dic                    #删除整个字典

del dic['键']             #通过键删除一个键值对​​​​

.clear()                   #清空​

:​

dic['键']                  #如果这个键在字典中就是修改,不在就是添加

.update('键':'值')    #更新  如果这个键在字典中就是修改,不在就是添加

:

.get('键',返回值)​​   #查询的是键所对应的值,如果没有该建,则默认返回None,返回值可以自己定义.​

print(dic['键'])       #也是查询键所对应的值,但是没有该键,则报错.​

字典的其他操作:

dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}​

for i in dic:

print(i)    #遍历的是字典的键

if i in dic:

print(dic[i])​​   #没有返回值

print( dic.get(i))   #有返回值

字典独有的方法:

.keys() #对应字典的键   以元组的方式将键放在一个高仿列表里

.value() #对应字典的值  一元组方式将值放在一个高仿列表里

.items() #对应字典的键值对 以元组形式将键值对放在一个高仿列表里​​​​​​​之所以叫高仿列表是因为无索引所以叫高仿

for k,v in dic.items(): #通过解构赋值

     print('这是键',k)

     print('这是值',v)​

#解构赋值:​

a,b = 1,2 即将ab分别赋值1和2 ,位置对应即可。

1.数字:

​a,b = 1,2

print(a,b)

结果:

1  2

2.元组:

a,b = ('你好','汪峰')

print(a,b)

结果:

你好 汪峰

3.列表:

a,b = ['你好','汪峰']

print(a,b)

结果:

你好 汪峰

4.字典:

a,b = {'汪峰':'男的','章子怡':'女的'}

print(a,b)

结果:

汪峰 章子怡

#面试题​ 用一行代码将ab的值调换 a=10 b=20

利用解构赋值即可:

a,b = b, a

print(a,b)​​

​这个解构赋值适用于数字,字符串,列表,元组,字典等数据类型​

字典的嵌套:

dic1 = {
 'name':['alex',2,3,5],
 'job':'teacher',
 'oldboy':{'alex':['python1','python2',100]}
 }
dic1['name'].append('wusir')
print(dic1)
s = dic1['name'][0].title()
print(s)
dic1['oldboy']['alex'].remove('python2')
print(dic1)  

二、id is ==

id :  #查询内存地址

== :  #是判断两边的数据是不是一样

is :  #是判断两边的数据是不是一个 内存地址

在一个py文件中只要顶行写都是代码块,同一个代码块的内存地址是一个的。

总结: ‘ ==’ 是 比较 符号 两边表达式 的值是否相等,而 ‘is' 是比较两边的对象是否是同一个内存地址。如内存地址相等,那么这两边指向同一个内存空间。​

可以说,如果内存地址相同,那么值一定相同; 值相同,内存地址不一定相同。​.

a = 100

b = 100        ​​ 这两个是在一个代码块中 ​

####  Python 程序是由代码块构造的,块是一个python程序的文本,它是作为一个执行单元的。

代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块。

三、小数据池

小数据池只针对数字,字符串和布尔值!​

bool值 ,True False,i无论创建多少个变量指向它,他在内存中的地址都是一个

数字的小数据池是-5到256

字符串小数据池的规则:

1.自己定义的且不含有特殊字符的字符串没有限制,有特殊字符的字符串长度必须是为0或者1时,才能没有限制

2. 没有特殊字符的用乘法得到的字符串时:

​ a.当乘数为 0或者1的时候,是,是可以使用小数据池的

b.当乘数大于1的时候,字符串乘完以后的字符串数量y​ 要小于等于20.​​

3.当含有特殊字符进行乘法运算时:

a.​​字符串的长度要大于一

​##满足以上的条件的数据才能使用小数据池!!

​​代码块内的缓存机制是和代码块之间的缓存机制不同的!

  在执行一个代码块内的​命令时,python会先检查这个值是不是已经存在,如果存在,则会直接调用这个存在的数据,这样就会导致在一个代码块中的两个变量指向同一个内存地址.

  多个代码块中是使用小数据池的.​​​!!!!

  在进行,不同的代码块之间的命令时,pythonh会先查询小数据池,看看这个数据是否是满足小数据池的数据e如果是那会指向同一个地址,所以当两个代码块执行的时候,不满足小数据池的数据会得到两个不同的对象

  综上所述,要通过 is 查看两个数据是否是一个对象,主要是查看内存地址是否一样.

#字典
#增加:
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
dic['k4'] = 'v4'
dic['k3'] = 'v3'
dic.setdefault('k5')
print(dic)
'''

#.setdefault()      里面的参数是键和值,如果没有值默认值得None,如果在字典里
#有这个键则是不进行添加,如果没有就添加
'''
dic = {}
dic['歌手'] = '汪峰'
print(dic)
dic.setdefault('王菲','歌手')
print(dic)
dic.
'''
#对字典进行修改
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
dic['k4'] = 'v4'
dic['k1'] = 'alex'
dic['k3']= [11,22,33,44]
dic['k3'] = [18,22,33,44]
print(dic)
'''
#循环遍历字典

dic = {'剑圣':'','哈啥给':'剑豪','大宝剑':'盖伦'}
key_list = dic.keys()
value_list = dic.values()
key_value_list = dic.items()
#for i in  :
print(key_list)
for i in value_list:
    print(i)
for k,j in key_value_list:
    print(k,j)

#字典的嵌套
'''
dic1 = {
 'name':['alex',2,3,5],
 'job':'teacher',
 'oldboy':{'alex':['python1','python2',100]}
 }
dic1['name'].append('wusir')
print(dic1)
s = dic1['name'][0].title()
print(s)
dic1['oldboy']['alex'].remove('python2')
print(dic1)
'''

​​

猜你喜欢

转载自www.cnblogs.com/sanzangdashi3/p/9857118.html