字典是Python中唯一的一个映射类型。他是由 { } 括起来的键值对组成。在字典中key是唯一的,在保存的时候,根据key计算出一个内存地址,然后将key-value保存在这个地址中,也就是hash算法。在dict中存储的key-value中的key必须是可hash的。
Python中的可hash数据类型:int,str,bool,…
不可hash的:list,dict,set.
语法:{key1:value1,key2:value2,…}
其中key不可变(可hash),value可以是任意数据类型。
字典的增加有两种操作方式
①dic[ key ] = value
如果dic中没有出现过的key则新增一个,如果出现过就是赋值。
②dic.setdefault( key , value )
setdefault中的value参数可省略,如果省略默认给值None
如果key已经存在,则不会进行任何操作。
dic = {}
dic['sno'] = '1234'
dic['sname'] = '张三'
print(dic)
# 输出结果:{'sno': '1234', 'sname': '张三'}
dic.setdefault('sage',18)
dic.setdefault('sadress')
dic.setdefault('sadress','XXXX') # 因为key和上一行一样,所以不会进行操作。
print(dic)
# 输出结果:{'sno': '1234', 'sname': '张三', 'sage': 18, 'sadress': None}
2.删
①dic.pop( key )
删除指定的key及其value
返回值为删除的key的value
②del dic[ key ]
效果同上一条,但无返回值。
③dic.popitem()
随机删除一个
返回值为( key , value ),数据类型为:tuple(元组)
④dic.clear()
清空字典
dic = {'sno': '1234', 'sname': '张三', 'sage': 18, 'sadress': None,'semail':'321m'}
ret = dic.pop('sadress')
print(ret) # None
print(dic) # {'sno': '1234', 'sname': '张三', 'sage': 18, 'semail': '321m'}
del dic['semail']
print(dic) # {'sno': '1234', 'sname': '张三', 'sage': 18}
ret = dic.popitem()
print(ret) # ('sage', 18)
print(dic) # {'sno': '1234', 'sname': '张三'}
dic.clear()
print(dic) # {}
3.查
①直接输出语句
print( dic[ key ] )
弊端:如果key不存在,会直接报错
②dic.get( key , 返回值 ) 第二参数可省略
当key存在的时候返回其value
不存在的时候返回指定的返回值,省略返回值默认返回None
dic = {'sno': '1234', 'sname': '张三', 'sage': 18, 'sadress': None}
print(dic['sno']) # 1234
print(dic[321321]) # 报错:KeyError: 321321,key不存在
ret = dic.get('sname')
print(ret) # 张三
ret = dic.get('sage', 'abcde')
print(ret) # 18
ret = dic.get(999)
print(ret) # None
ret = dic.get(999, 'abcde')
print(ret) # abcde
4.改
①dic[ key ] = value
和增加一样,如果key存在,就是更改,不存在就是增加。
②dic1.update(dic2)
把dic2中的内容更新到dic1中,如果key有相同的,就更改为dic2的值,如果key不存在,就新增。dic2的内容不会变化。
dic1 = {'sno': '1234', 'sname': '张三', 'sage': 18, 'sadress': None}
dic2 = {'sno': '4321', 'semail': '321m'}
dic1.update(dic2)
print(dic1)
# {'sno': '4321', 'sname': '张三', 'sage': 18, 'sadress': None, 'semail': '321m'}
print(dic2)
# {'sno': '4321', 'semail': '321m'}
5.其他操作
dic.keys()
返回一个list类型的列表,其中每个元素都是dic里的key
dic.values()
同上,返回的是value
dic.items()
返回的也是列表,列表中的元素类型是tuple(元组)
返回值例如:[ ( key , value ) ]
和列表、元组一样,字典内也可以放字典(套娃)
dic = {
'name': '张三',
'age': 33,
'child': {
'name': '张XX',
'age': 10
},
'wife': {
'name': '罗XX',
'age': 30
}
}
ret = dic.get('child')
print(ret) # {'name': '张XX', 'age': 10}
ret = dic.get('child').get('age') # 允许套娃
print(ret) # 10