字典:
1、列表如果存储大量数据,查询速度相对慢一些
2、列表存储的数据,一般没有什么关联性
针对以上原因,python提供了一个基础数据类型,dict 字典
数据类型的分类 :
容器型数据类型:list, tupel,dict,set
非容器型数据类型: str , bool , int
可变(不可哈希)的数据类型: list, dict,set
不可变(可哈希)的数据类型:str , int, bool, tuple
{‘name’:‘alex’} 以键值对形式存储的数据类型
1、 字典的键必须是不可变的数据类型,唯一的,不重复。 重复则后面的覆盖之前的
字典的值可以是任何数据类型(对象)
2、字典的查询速度非常快
3、字典在python3.5之前是无序的,单是3.6优化机制,字典会按照创建字典之处的数据排列
4、字典可以存储大量的关联性数据
# 字典嵌套字典列表 dic = {'name': 'alex','python3期':['小潘','春哥', '二师兄'], '太白':{ 'name':'太白金星', 'id': 1306546743423, 'phone': 1358225xxxx, 'sex': '男' } }
2、字典的增删改查
增: 有则覆盖,无责添加
dic['keys'] = ' value '
dic = {'name': 'barry', 'age': 18, 'sex': 'man'} dic['high'] = 179 print(dic) # {'name': 'barry', 'age': 18, 'sex': 'man', 'high': 179} dic['name'] = 'echo' print(dic) #{'name': 'echo', 'age': 18, 'sex': 'man', 'high': 179}
setdefault 有则不变,无责添加
dic.setdefault('KEYS', 'value') 如果不填value,责为None
dic = {'name': 'barry', 'age': 18, 'sex': 'man'} dic.setdefault('high') #{'name': 'barry', 'age': 18, 'sex': 'man', 'high': None} print(dic) dic.setdefault('name', 'echo') print(dic) #{'name': 'barry', 'age': 18, 'sex': 'man', 'high': None}
删:
1、pop 通过键删除对应值
dic.pop('key') dic.pop(' key' , ' 没有这个键 ‘) 如果没有健,可以自定义返回值
dic = {'name': 'barry', 'age': 18, 'sex': 'man'} dic.pop('name1', '没有该键') # 没有键则返回自定义的值 print(dic)
2、clear 清空列表值,保留列表
dic = {'name': 'barry', 'age': 18, 'sex': 'man'} dic.clear() print(dic)
3、popitem 删除最后一个键值对 (3.5及以前版本,是随机删除。因为3.5之前版本字典是无序)
dic = {'name': 'barry', 'age': 18, 'sex': 'man'} dic.popitem() # 3.5之前是随机删除,3.6删除最后一个键值对 print(dic) # {'name': 'barry', 'age': 18}
4、del
dic = {'name': 'barry', 'age': 18, 'sex': 'man'} del dic # 删除整个字典
一次只能删除一个键,没有则报错。还是用pop好一点
dic = {'name': 'barry', 'age': 18, 'sex': 'man'} del dic['name1'] # 一次只能删除一个键,没有则报错。还是用pop好一点 print(dic)
改:
dic[' key '] = ' value '
dic = {'name': 'barry', 'age': 18} dic['age'] = 14 print(dic) # {'name': 'barry', 'age': 14} dic['age', 'name'] = 14, 'alex' print(dic) # {'name': 'barry', 'age': 14, ('age', 'name'): (14, 'alex')} 把两个键当一个元组,组合成一个键
update 有两种方式:
1、 把dic1 update到 dic2
dic1 = {"name": "jin", "age": 18, "sex":"male"} dic2 = {"name": "alex","weight": 75} dic2.update(dic1) # 将dic1字典中的键值对覆盖添加到dic2中,dic1不变。 print(dic1) # {'name': 'jin', 'age': 18, 'sex': 'male'} print(dic2) # {'name': 'jin', 'weight': 75, 'age': 18, 'sex': 'male'}
2、dic.update(weight=150, high=175)
dic1 = {"name": "jin", "age": 18} dic1.update(weight=150, higi=178) # key不在dic1中,则增加 print(dic1) # {'name': 'jin', 'age': 18, 'weight': 150, 'higi': 178} dic1.update(name=150) # key在dic1中,则修改 print(dic1) # {'name': 150, 'age': 18, 'weight': 150, 'higi': 178}
查:
1、按照键查对应的值
print(dic['name'])
print(dic['name1']) # 没有此键会报错
2、用gat查 ,不会报错
dic = {"name": "jin", "age": 18} ret = dic.get('age') # 打印 18 ret = dic.get('age1') # 打印None ret = dic.get('age1','没有此键') #打印 '没有此键' print(ret)
3、直接循环字典,获取所有key值
for i in dic: print(i)
4、 dic.keys() , dic.values() dic.item()
dic = {"name": "jin", "age": 18} # dic.keys() dic.values() dic.items() # 上面三个都是返回一个类似于列表的容器的特殊数据类型。 print(dic.keys()) for key in dic.keys(): print(key) print(dic.values()) for value in dic.values(): print(value) print(dic.items()) for item in dic.items(): print(item)
dic = {"name": "jin", "age": 18} for k, v in dic.items(): print(k, v) # 便利,key和value, 可只打印k或v
字典的嵌套
dic = { 'l1': ['alex', '太白'], 'id': 3, 1: { 'data': 20181225, 'place': '深圳校区', 'class': 'python3期', 'name_list': ['小潘', 'jay', '春哥', 'xx'], } } # 1,给小列表['alex', '太白'] alex后面插入一个字符串,'aaa' dic['l1'].insert(1, 'aaa') print(dic) dic2 = {'l1':['alex','aaa', '太白']} # dic.update(dic2) # print(dic)
# 2,将id对应的3变成1. dic['id'] = 1 print(dic)
# 3,将 1 对应的字典的data变成20181224, dic[1]['data'] = 20181224 print(dic) dic[1]['data'] -= 1 print(dic)
# 4,将name_list对应的jay全部变成大写。 dic[1]['name_list'][1] = dic[1]['name_list'][1].upper() print(dic)
# 4,将name_list对应的 xx 删除。 dic[1]['name_list'].pop() dic[1]['name_list'].remove('xx') del dic[1]['name_list'][-1] print(dic)
格式化输出:
# 通过字典的方式 dic = {'name': '太白', 'sex': '男', 'age': 18} msg = '我叫%(name)s,今年%(age)s,性别%(sex)s' % dic print(msg)
formkeys()
dic = {'name': 'alex'} dic = dict.fromkeys('abc', '春哥') #{'a': '春哥', 'b': '春哥', 'c': '春哥'} dic = dict.fromkeys([1, 2, 3],'春哥') # {1: '春哥', 2: '春哥', 3: '春哥'} # 坑:值如果是可变的数据类型,那么所有的值都是一个内存地址 dic = dict.fromkeys([1, 2, 3], ['alex']) #{1: ['alex'], 2: ['alex'], 3: ['alex']} dic[1].append(666) #{1: ['alex', 666], 2: ['alex', 666], 3: ['alex', 666]} print(dic)