python中的基本数据类型之字典
一.字典的简单介绍
字典是(dict)是python中惟一的一个映射类型,他是以{}括起来的键值对组成,在字典中key是唯一的,在保存的时候,根据key来计算出一个内存地址,然后将key-value保存保存在这个地址中,这种算法被称为hash算法,所以在字典中存储的key-value必须是可合适 hash的,(可以改变的都是不可hash的,hash意味着不可变)这是为了能够准确的计算内存地址而规定的.
不可变的数据类型:int,str,tuple,bool
可变的数据类型:list,dict,set
value没有要求,可以保存任意类型的数据.
1 dic={132:45,True:999,'ig':1,(1,2,3):'nje'}
2 print(dic)
3 # {132: 45, True: 999, 'ig': 1, (1, 2, 3): 'nje'}
语法:{key1:value1,key2:value2......}
1 dic={132:45,True:999,'ig':1,(1,2,3):'nje'}
2 print(dic)
3 # {132: 45, True: 999, 'ig': 1, (1, 2, 3): 'nje'}
二,字典的增删改查和其他操作
1.增加
1.1 dic['key']='value'
1 dic={132:45,True:999,'ig':1,(1,2,3):'nje'}
2 print(dic)
3 # {132: 45, True: 999, 'ig': 1, (1, 2, 3): 'nje'}
1.2
1 ⑴dic.setdefault('key') #往字典里添加一个key,value默认为None,如果key已经存在,不会起任何作用
2 ⑵dic.setdefault('key','value') #往字典里添加一个key-value
3 dic = {132: 45, True: 999, 'ig': 1, (1, 2, 3): 'nje'}
4 dic.setdefault('李嘉诚')
5 print(dic)
6 #{132: 45, True: 999, 'ig': 1, (1, 2, 3): 'nje', '李嘉诚': None} #(1)
7
8 dic = {132: 45, True: 999, 'ig': 1, (1, 2, 3): 'nje'}
9 dic.setdefault('李嘉诚','房地产')
10 print(dic)
11 # {132: 45, True: 999, 'ig': 1, (1, 2, 3): 'nje', '李嘉诚': '房地产'} #(2)
12
13 dic = {132: 45, True: 999, 'ig': 1, (1, 2, 3): 'nje'}
14 dic.setdefault(132,'房地产')
15 print(dic)
16 # {132: 45, True: 999, 'ig': 1, (1, 2, 3): 'nje'} #如果key已经存在,不会起任何作用
2.删除
2.1 dic.pop('key')
dic.pop('key')
dic = {132: 45, True: 999, 'ig': 1, (1, 2, 3): 'nje'}
ret=dic.pop(132) #通过key删除 返回被删除的value
print(ret) #如果key不存在会报错
print(dic)
# 45
# {True: 999, 'ig': 1, (1, 2, 3): 'nje'}
2.2 del dic['key']
1 dic = {132: 45, True: 999, 'ig': 1, (1, 2, 3): 'nje'}
2 del dic[132]
3 print(dic)
4 # {True: 999, 'ig': 1, (1, 2, 3): 'nje'}
2.3 dic.popitem()
1 dic = {132: 45, True: 999, 'ig': 1, (1, 2, 3): 'nje'}
2 del dic[132]
3 print(dic)
4 # {True: 999, 'ig': 1, (1, 2, 3): 'nje'}
2.4 dic.clear()
1 dic = {132: 45, True: 999, 'ig': 1,132:'gu',(1, 2, 3): 'nje'}
2 dic.clear()
3 print(dic)
4 # {} #得到的是一个空的字典
3.修改
3.1
1 dic[key]=value 强制修改
2 dic = {132: 45, True: 999, 'ig': 1,132:'gu',(1, 2, 3): 'nje'}
3 dic[132]=789
4 print(dic)
5 # {132: 789, True: 999, 'ig': 1, (1, 2, 3): 'nje'}
3.2 dic1.update(dic)
1 dic = {132:45, '地方规划局': 999, 'ig': 1,(1, 2, 3): 'nje'}
2 dic1={1:'a',2:'b',132:46}
3 dic.update(dic1) #把dic 1中的内容更新到dic中,如果key重复,则修改替换,如果key不存在,就新增.
4 print(dic)
5 # {132: 46, '地方规划局': 999, 'ig': 1, (1, 2, 3): 'nje', 1: 'a', 2: 'b'}
4.查
4.1 dic.get(key)
1 dic.get(key)
2 dic = {132:45, '地方规划局': 999, 'ig': 1,(1, 2, 3): 'nje'}
3 print(dic.get(13,'好像虎')) #找不到key返回None,或者指定返回内容
4 #好像虎
4.2 dic[key]
1 dic = {132:45, '地方规划局': 999, 'ig': 1,(1, 2, 3): 'nje'}
2 print(dic[132]) #45
3 print(dic[12]) #KeyError: 12 没有这个键的时候查询会报错
4.3 for循环
1 dic = {132:45, '地方规划局': 999, 'ig': 1,(1, 2, 3): 'nje'}
2 for i in dic: #循环默认是去字典中的键
3 print(i)
4 # 132
5 # 地方规划局
6 # ig
7 # (1, 2, 3)
5.字典的其他操作
5.1 keys();values();items()
1 dic = {132:45, '地方规划局': 999, 'ig': 1,(1, 2, 3): 'nje'}
2 print(dic.keys()) # (高仿列表) 高仿列表暂时可以当做真的列表用,也可以迭代
3 print(dic.values()) # (高仿列表)
4 print(dic.items()) #也是高仿的列表,只不过里面装的是元组
5 # dict_keys([132, '地方规划局', 'ig', (1, 2, 3)])
6 # dict_values([45, 999, 1, 'nje'])
7 # dict_items([(132, 45), ('地方规划局', 999), ('ig', 1), ((1, 2, 3), 'nje')])
5.2 解构(解包)
1 a,b = '12' #将后边解构打开按位置赋值给变量 支持 字符串 列表 元组
2 print(a)
3 print(b)
4 # 1
5 # 2
6
7 dic = {'易大师':'剑圣','剑豪':'托儿所','草丛伦':'大宝剑'}
8 for a,b in dic.items():
9 print(a)
10 print(b)
11 # 易大师
12 # 剑圣
13 # 剑豪
14 # 托儿所
15 # 草丛伦
16 # 大宝剑
17
18 dic = {'易大师':'剑圣','剑豪':'托儿所','草丛伦':'大宝剑'}
19 for key,value in dic.items():
20 print(key,value)
21 # 易大师 剑圣
22 # 剑豪 托儿所
23 # 草丛伦 大宝剑
三,字典的嵌套
1 dic = {'name':'汪峰','age':43,'wife':{'name':'国际章','age':39,'salary':100000},'baby':[{'name':'熊大','age':18},{'name':'熊二','age':15},]}
2
3 dic['baby'][0]['age'] = 19
4 print(dic)
改变世界,改变自己!