字典包含了key和value
其中key是不可变的,value隶属于key是可以变的
字典是无序的,字典没有下标,通过key来寻找value
test = {'A':1,'B':'zhangsan','C':'lisi'}
print (test)
- 查找
test = {'A':1,'B':'zhangsan','C':'lisi'}
print (test['B'])
可以通过key、来查找值
print(test.get('C'))
print(test.get('F'))
通过get来查找,有就打印value,没有就打印None 使用get是一个比较安全的查找方式,如果查不到会返回None值,这样执行代码不会报错
print ('C' in test) #这个类似python2.X中的test.has_key('C'),python3中已经没有has_key了
print (test.keys())
print (test.values())
查找所有key和查找所有value
- 修改
test = {'A':1,'B':'zhangsan','C':'lisi'}
test ['C']=33
test ['D']=44
print(test)
根据key修改value ,存在则修改,不存在则新增
test1 = {'A':{'AA':111},'B':222}
test2 = {'B':123,'C':333}
test1.update(test2)
print (test1)
将两个字典合并,已存在的key会被覆盖,没有则新增
test1 = {'A':{'AA':111},'B':222}
print (test1.items())
将字典转成列表
- 删除
test = {'A':1,'B':'zhangsan','C':'lisi'}
del test['A']
print (test)
print(test.pop('B')) #pop删除并返回删除的内容
使用pop删除后,会返回删除的值
test = {'A':1,'B':'zhangsan','C':'lisi','D':4,'E':5}
test.popitem()
print (test)
使用popitem会随机删除一个(好像删除的是最后一个)
- 多级字典
test = {'A':{'AA':[123,456]}} #三级嵌套,本实例是两个字典,一个列表
print (test)
test['A']['AA'][1]=789
print (test)
- 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)
创建一个新的字典,然后批量创建字典的key,默认value为None,可以修改None,通过批量建立key,这样减少了一半建立字典的工作量。
test = {'A':1,'B':2,'C':3}
a = test.fromkeys(['AA','BB','CC'])
print (a)
将现有的字典给修改了
test = {'A':1,'B':2,'C':3}
a = test.fromkeys(['AA','BB','CC'],'123')
print (a)
可以批量赋予key的value
print (test)
其实可以看到test并没有改变,也就是说fromkeys不会改变现有的字典 fromkeys只会初始化一个新的字典
a = dict.fromkeys(['A','B','C'],[111,{'name':'aubrey'},222])
print(a)
批量为字典key A、B、C赋值[111,{'name':'aubrey'},222]
a['C'][1]['name']='Peter' #修改A字典C这个key的value
print(a)
但实际看到的是,所有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对饮的值都打印了一遍
循环打印字典
for k,v in test.items():
#.items将字典变成列表,也就是['A',1],k对应的这个A,v对应这个1,然后就这样赋值循环;
这种方式没有上面的好,因为需要不断的将字变成程列表,再去循环
print(k,v)