关于字典的那些事儿.
程序是你试错-调整出来的, 不是你一下子就能完美写出来的.
你要面对很多类似的困难, 让你难受一阵子你才能有长进.生活也如此. -----涛哥.
字典
1.1 字典的创建:(3种方式)
(1) 直接创建 dic = {'name': 'alex'} (2) 函数默认值形式创建 dic = dict(内容) 如 dic = dict(name= 'alex',age = 16) # 函数的默认值的创建, 前面的变量name 和age 不带引号 Print(dic) 又如: dic1 = dict({'name':"alex", "age":12 }) # 这种函数式的创建,就相当于直接写出来了.(有点多此一举的) print(dict1)
(3) 批量创建 fromkeys()*** # dict.fromkeys**拆键均分, 值相同 dic = dict.fromkeys('abc', '嘎嘎') print(dic) # {'a':'嘎嘎','b':'嘎嘎','c':'嘎嘎'}
增删改查(3 4 2 3)
why字典:? 1.列表如果存储了大量的数据,查询速度相对性较慢. 2.列表孙处数据一般没有什么关联性. [小光,175,男....] 针对以上的因素, python提供了一个基础数据类型: dict字典. 数据类型的分类: 容器型的数据类型: list, tuple, dict, set. 非容器型的数据类型:str, bool, int 可变(不可哈希)的数据类型:list, dict, set 不可变(可哈希)的数据类型: str,int, bool, tuple, what 字典? ---"以键值对存储的数据类型". 1.字典的键必须是不可变(可hash)的数据类型, 唯一的不重复. 字典的值可以是任意的数据类型(包括对象). 2. 字典的查询速度非常之快. 3.字典在3.6之前是无需的, 但是在3.6优化机制下显示是有序的. how: 增删改查 其他操作 where: 当你想构建大量的数据类型的时候, 用dict 04 字典的嵌套 05 集合(了解)
增:(3种) 1. #有则覆盖, 没有就新增 dic["键"] = 值 # dic['weight'] = 150 2. setdefault # 有就不覆盖, 没有就新增, setdefault不会拆键,只是增加键和值,这个要牢记. dic.setdefault('键',v)
# dic.setdefault('high')
# dic.setdefault('high',175)
# dic.setdefault('name', '日天')
# print(dic)
3. update #update(键 = "值")
dic.update(键 = "值") # 注意: 键-不带引号~ 这其实是函数里面默认值的一个创建
dic.update(weight = '50kg',height = 175)
print(dic)
# 删 (4种)) 1. del # del dic # print(dic) # del dic['name'] # # print(dic) 2. pop 通过键去删除键值对 # ret = dic.pop('name') # print(ret) # 有返回值 返回对应的值 # ret1 = dic.pop('name1', '没有此键') # 没有此键 就不报错并且设置返回值 # print(ret1) # print(dic) 3. popitem 删除最后一个键值对 # 3.5之前是随机删除,3.6删除最后一个键值对 # ret= dic.popitem() # print(ret) # print(dic) 4. clear 清空 # dic.clear() # print(dic)
改: (2种) 1. dic['键'] = 新的值 dic ['age'] = 28 print(dic) 2.update (1) update两个字典的覆盖添加 dic1 = {'name':"金",'age': 18, "sex":"male"} dic2 = {'name':'alex', weight':"75kg"} dic1.update(dic2) # 将dic2中的键值对覆盖添加到dic1中, dic2不变. print(dic1) print(dic2) # (2)update dic.update(键=值,) #其实算增加 dic.update('weight' = 50,height = 175) print(dic)
查 (3种)) 1. print(dic[键]) #按照键查询对应的值 ,没有的话会报错 print(dic['name']}
2. get 没有的话不报错默认返回None, 可以自己设置默认值 ret = dic.get('age') ret = dic.get('age1') ret = dic.get('age1','没有此键') print(ret) 3.for 循环字典*,
***打印出的是字典的key值. for i in dic: print(i) 4.for xxx in dic.keys(), dic.values(), dic.items() # print(dic.keys()) # 上面三个都是返回一个类似于列表的数据类型.
** for key in dic.keys(): print(key) for value in dic.values(): print(value)
*** for k,v in dic.items(): # 这里面有一个拆分 print(k,v)
字典的其他操作 -- 批量创建字典 .fromkeys
fromkeys ----- 是一种批量创建不同键相同值字典的方法 结构: dict.fromkeys("可迭代对象",值) 是一种批量创建不同键相同值字典的方法 dic = {'name':'ale'} dic = dict.fromkeys('abc', '春哥') # 主体是dict.fromkeys() print(dic) dic = dict.fromkeys([1,2,3],'春哥') #键是可迭代对象的每一个元素, 值就是值 print(dic) # 坑: 值如果是可变的数据类型, 那么所有的值都在同一个内存地址当中. 多以改变其中的一个值时, 所有的值都跟着改变. dic = dict.fromkeys("abc",["alex"]) dic['c'].append('666') print(dict) # {'a': ['alex', '666'], 'b': ['alex', '666'], 'c': ['alex', '666']}
格式化输出%s与字典相结合
当格式化输出%s与字典相结合 ''%(键)s'' %字典 # 当%s与字典相结合 形成的格式化输出 dic = {'name':'白勇太', 'gender' : '男', 'age' : 18} msg = "我叫%(name)s, 今年%(age)s, 性别%(gender)s." % dic # %()里不带引号 print(msg) # 我叫白勇太, 今年18, 性别男.
字典的嵌套:
字典的嵌套练习: dic = { 'l1': ['alex', '太白'], 'id': 3, 1: { 'data': 20181225, 'place': '深圳校区', 'class': 'python3期', 'name_list': ['小潘', 'jay', '春哥', 'xx'], } 1. 给小列表['alex','太白']alex后面插入一个字符串, "aaa" # dic['l1'] = dic['l1'].insert(1,"aaa") # 都行好像 dic['l1'].insert(1,"aaa") 2. 将id对应的3变成1. dic['id'] = 1 print(dic) 3. 将1对应的字典的data变成20181224, dic[1][data] = 201801225 4. 将name_list对应的jay全部变成大写。 dic[1]['name_list'][1] = dic[1]['name_list'][1].upper() print(dic) 5. 将name_list对应的xx删除。 dic[1]['name_list'].pop(-1) 或 dic[1]['name_list'].remove('xx') 亦或 del dic[1]['name_list'][-1] # 即 del,pop,remove三删除方式