• day 05 字典,字典嵌套


    字典:

    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)
  • 相关阅读:
    树莓派4B-安装docker
    树莓派4B-挂载硬盘
    树莓派4B-修改软件源
    树莓派4B-初始化网络-静态ip
    树莓派4B-下载系统
    爬虫之路: 字体反扒升级版
    annotations导入报错
    [转]微信小程序全局分享转发控制实现——从此无需页面单独配置
    ollydbg 条件断点语法格式
    c++ CreateThread传递char*参数乱码解决办法
  • 原文地址:https://www.cnblogs.com/echo2019/p/10175144.html
Copyright © 2020-2023  润新知