zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    CSS中position小解
    position
    mac默认安装postgresql, 如何让postgresql可以远程访问
    The data directory was initialized by PostgreSQL version 9.6, which is not compatible with this version 10.0.
    active admin gem error
    psql 无法添加超级用户
    ubuntu 15.04 安装Balsamiq Mockups 3
    Rails html 写public里图片的路径
    rails c 历史命令
    undefined local variable or method `per' for []:ActiveRecord::Relation
  • 原文地址:https://www.cnblogs.com/echo2019/p/10175144.html
Copyright © 2011-2022 走看看