字典包含了key和value

其中key是不可变的,value隶属于key是可以变的

字典是无序的,字典没有下标,通过key来寻找value

test = {'A':1,'B':'zhangsan','C':'lisi'}
print (test)

image_1c08g4mcj1v9kmah1j3mvdkssn19.png-2.6kB

  • 查找
test = {'A':1,'B':'zhangsan','C':'lisi'}

print (test['B'])

image_1c08g8hkj13d615imgvc1o63fn71m.png-1.2kB 可以通过key、来查找值

print(test.get('C'))
print(test.get('F'))

image_1c08g9b9110121nir1lm7dos148v23.png-1.3kB 通过get来查找,有就打印value,没有就打印None 使用get是一个比较安全的查找方式,如果查不到会返回None值,这样执行代码不会报错

print ('C' in test)    #这个类似python2.X中的test.has_key('C'),python3中已经没有has_key了

image_1c08ga53h1oogpep17h31prs1k9m2g.png-0.7kB

print (test.keys())
print (test.values())

image_1c08gal0d19oh1hd5vq991c1dfc2t.png-4.3kB 查找所有key和查找所有value

  • 修改
test = {'A':1,'B':'zhangsan','C':'lisi'}

test ['C']=33
test ['D']=44

print(test)

image_1c08gca6v3o01cge184h6top9s3q.png-3.2kB 根据key修改value ,存在则修改,不存在则新增

test1 = {'A':{'AA':111},'B':222}
test2 = {'B':123,'C':333}

test1.update(test2)
print (test1)

image_1c08gd249p9r18s51f7v74ej8347.png-2.2kB 将两个字典合并,已存在的key会被覆盖,没有则新增

test1 = {'A':{'AA':111},'B':222}
print (test1.items())

image_1c08gdu1sgph10q2116ni7bfk4k.png-3.3kB 将字典转成列表

  • 删除
test = {'A':1,'B':'zhangsan','C':'lisi'}

del test['A']

print (test)

image_1c08ghe8o1b6n127517vjkgj18hb51.png-2.4kB

print(test.pop('B'))  #pop删除并返回删除的内容

image_1c08gi30a1o4li92qc1ej41e405e.png-1.1kB 使用pop删除后,会返回删除的值

test = {'A':1,'B':'zhangsan','C':'lisi','D':4,'E':5}
test.popitem()
print (test)

image_1c08ginaj9tf3ub174jvc2197e5r.png-3kB 使用popitem会随机删除一个(好像删除的是最后一个)

  • 多级字典
test = {'A':{'AA':[123,456]}}        #三级嵌套,本实例是两个字典,一个列表

print (test)

image_1c08gk4gg17jc1bcnkn4r18vvt68.png-2.4kB

test['A']['AA'][1]=789
print (test)

image_1c08gkpsl1qh85f5hmi1o21uum6l.png-2.3kB

  • setdefault
test = {'A':1,'B':2,'C':3}
print(test.setdefault('C',{'CCC':333}))
print(test.setdefault('D',{'DDD':444}))
print(test)

执行结果:
3
{'DDD': 444}
{'A': 1, 'B': 2, 'C': 3, 'D': {'DDD': 444}}

setdefault到字典中获取key的值并返回,如果没有则新增

  • fromekeys
a = dict.fromkeys(['A','B','C'])
print(a)

image_1c08gng5613r910u4ndcr1710nk8f.png-2.1kB 创建一个新的字典,然后批量创建字典的key,默认value为None,可以修改None,通过批量建立key,这样减少了一半建立字典的工作量。

test = {'A':1,'B':2,'C':3}
a = test.fromkeys(['AA','BB','CC'])
print (a)

image_1c08gp2tbcsq11ls18b71ru01tqk8s.png-2.3kB 将现有的字典给修改了

test = {'A':1,'B':2,'C':3}
a = test.fromkeys(['AA','BB','CC'],'123')
print (a)

image_1c08gptvi1cmb1hv94ts6e81iat99.png-2.3kB 可以批量赋予key的value

print (test)

image_1c08gqtugt1t1d651al0gjqoea9m.png-1.9kB 其实可以看到test并没有改变,也就是说fromkeys不会改变现有的字典 fromkeys只会初始化一个新的字典

a = dict.fromkeys(['A','B','C'],[111,{'name':'aubrey'},222])
print(a)

image_1c08grigj1jmb1fv316ssqig80a3.png-4.2kB 批量为字典key A、B、C赋值[111,{'name':'aubrey'},222]

a['C'][1]['name']='Peter'        #修改A字典C这个key的value
print(a)

image_1c08gsbmu14p51m8t19qv84d1e51ag.png-4.1kB 但实际看到的是,所有key的value都被修改了 这是因为当使用fromkeys,设置多级字典时,value使用的是同一个内存地址,所以当修改一个的时候,其他也就都被修改了。

  • 循环
test = {'A':1,'B':2,'C':3}
for i in test:
    print (i,test[i])            、

#打印的第一个i是循环只是将所有key赋值给i,所以在打印第一个i的时候,仅仅打印的是这个i的赋值,并不是字典;

但是打印的第二个test[i]就是打印字典了,和你直接使用print test['A']是一样的,只不过这里将A、B、C这三个key对饮的值都打印了一遍

image_1c08gtm1n1snjleetarplk1g0eat.png-1.5kB 循环打印字典

for k,v in test.items():    
#.items将字典变成列表,也就是['A',1],k对应的这个A,v对应这个1,然后就这样赋值循环;

这种方式没有上面的好,因为需要不断的将字变成程列表,再去循环
print(k,v)

image_1c08gv0b2u5j7h2nugmgno5cba.png-1.6kB