关于字典的那些事儿.


程序是你试错-调整出来的, 不是你一下子就能完美写出来的.
你要面对很多类似的困难, 让你难受一阵子你才能有长进.生活也如此.                                             -----涛哥.

 

字典

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三删除方式

 

posted @ 2018-12-25 20:21  Jack的逆旅  阅读(182)  评论(0编辑  收藏  举报