zoukankan      html  css  js  c++  java
  • Python基础Day5

    一、字典

    ①字典是python的基础数据类型之一

    ②字典可以存储大量的数据,关系型数据

    ③字典也是python中唯一的映射类的数据类型

     

    字典是以键值对的形式存在的,{键:值}

    字典的键必须是不可变的数据类型(工作中一般是由int和str组成)

    字典的值是任意数据类型,对象

     

    数据类型的分类:

    (不可哈希)可变的数据类型:列表(list)、字典(dict)、集合(set)

    (可哈希)    不可变的数据类型:字符串(str)、整型(int)、布尔值(bool)、元组(tuple)

     

    按存值个数区分:

    标量/原子类型:整型、字符串

    容器类型:列表、元组、字典

     

    按访问顺序区分:

    直接访问:整型

    顺序访问(序列类型):字符串、列表、元组

    key值访问(映射类型):字典

     

    字典的优点:

    ① 字典可以存储大量的数据,关系型数据。

    ② 查询速度快

     

    python3.5版本及之前版本的字典是无需的,python3.6开始字典是有序的

    字典的查询(抛去小数据池的概念),任何对象的ID都不一样,字典将所用的键在内存中转为为ID,直接通过ID找到对应的值

    字典是用哈希算法,比二分查找要快很多

    二、字典的增删改查

    # 字典的格式
    dic = {'name':'xiaoming','age':18,'hobby':'football','city':'Shenzhen'}

    增加

    ① 直接加 (前提是无相同的key值,否则会变成修改)

    dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing'}
    dic1['constellation'] = 'sagittarius'           # 添加键值对
    print(dic1)
    
    # 结果
    {'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing', 'constellation': 'sagittarius'}

    ② setdefault()

    key存在的话不会做任何修改,返回键对应的值;

    key不存在的话会添加键值对,只填key默认的值是None,返回值是None

    key不存在的话会添加键值对,key和value都添加,返回值是value

    ① 键key已存在

    dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing'}
    print(dic1.setdefault('name','Zhangsan'))               # 返回key对应的值,不做任何的修改
    print(dic1)
    
    # 结果
    xiaoming
    {'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing'}
    dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing'}
    print(dic1.setdefault('age'))
    print(dic1)
    
    # 结果
    18
    {'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing'}

    ②键key不存在,只添加键key

    dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing'}
    print(dic1.setdefault('job'))               # 只添加key默认的值是None
    print(dic1)
    
    # 结果
    None
    {'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing', 'job': None}

    ③键key不存在,添加键值对

    dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing'}
    print(dic1.setdefault('job','IT'))            # 返回key对应的值
    print(dic1)
    
    # 结果
    IT
    {'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing', 'job': 'IT'}

    删除

    ①pop()

    pop()通过键key去删除键值对,有返回值,返回值是被删除键key对应的值value

    如果没有此键key,没有设置第二个参数,则会报错

    如果没有此键key,设置了第二个参数,返回第二个参数

    键key存在

    dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
    print(dic1.pop('job','已删除'))            # 返回key对应的值,不会返回第二个参数
    print(dic1)
    
    # 结果
    IT
    {'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing'}

    键key不存在

    dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
    print(dic1.pop('a'))
    
    # 报错
    KeyError: 'a'
    dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
    print(dic1.pop('a','该键key不存在'))         # 返回值是第二个参数的内容
    print(dic1)
    
    # 结果
    该键key不存在
    {'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing', 'job': 'IT'}

    ② clear()     # 清空字典

    dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
    print(dic1)
    
    # 结果
    {}

    ③ popitem()

    python3.5版本及之前是随机删除一组键值对,python3.6是删除最后一组的键值对

    返回值是被删除的键key和值value的元组

    dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
    print(dic1.popitem())               # 返回键key和值value的组成的元组
    print(dic1)
    
    # 结果
    ('job', 'IT')
    {'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing'}

    ④ del

    a.可以通过键key删除对应的键值对

    dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
    del dic1['hobby']
    print(dic1)
    
    # 结果
    {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}

    b.可以在内存级别把整个字典删除

    dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
    del dic1
    print(dic1)
    
    # 报错
    NameError: name 'dic1' is not defined

     修改

    ①直接修改  

    通过键key来修改值value

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    dic1['job'] = 'accountant'          # 通过键key直接修改对应的值value
    print(dic1)
    
    # 结果
    {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}

    ② update()

    方式一:

    字典1.update(字典2)        将字典2的所有键值对覆盖并添加到dic1,dic2不变

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    dic2 = {'age':20 , 'city':'Shanghai','a':3}
    dic1.update(dic2)               # 将dic2的所有键值对覆盖并添加到dic1,dic2不变
    print(dic1)
    print(dic2)
    
    # 结果
    {'name': 'xiaoming', 'age': 20, 'city': 'Shanghai', 'job': 'IT', 'a': 3}
    {'age': 20, 'city': 'Shanghai', 'a': 3}

    方式二:

    update(键=值)

    键key存在会直接修改key对应的值,不存在key则直接添加键值对

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    dic1.update(name='Zhangsan',constellation='sagittarius')        # 键存在会直接修改值,不存在直接添加键值对
    print(dic1)
    
    # 结果
    {'name': 'Zhangsan', 'age': 18, 'city': 'Beijing', 'job': 'IT', 'constellation': 'sagittarius'}

    查询

    ① 通过键查询 

    若键不存在会报错

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    print(dic1['name'])
    
    # 结果
    xiaoming

    ② get()    

    通过键key查询值,键key不存在不会报错

    方式一:

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    print(dic1.get('name'))
    print(dic1.get(111))                # 键不存在不会报错,返回值是None
    
    # 结果
    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    print(dic1.get('name'))
    print(dic1.get(111))                # 键不存在不会报错,返回值是None

    方式二:

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    print(dic1.get(111,'该键不存在'))          # 键不存在不会报错,返回值是第二个参数,不写第二个参数默认是None
    
    # 结果
    该键不存在

    ③keys()

    把字典所有的键放在类似于列表的容器中

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    print(dic1.keys())
    
    # 结果
    dict_keys(['name', 'age', 'city', 'job'])

    可以转化成列表list

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    lis = list(dic1.keys())
    print(lis)
    
    # 结果
    ['name', 'age', 'city', 'job']

    可以遍历

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    for i in dic1.keys():
        print(i)
    
    # 结果
    name
    age
    city
    job

    直接遍历字典也能获取所有的键

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    for i in dic1:
        print(i)
    
    # 结果
    name
    age
    city
    job

    ④ values()

    把字典的所有值放在类似列表的容器中

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    print(dic1.values())
    
    # 结果
    dict_values(['xiaoming', 18, 'Beijing', 'IT'])

    可以转化为列表list

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    lis = list(dic1.values())
    print(lis)
    
    # 结果
    ['xiaoming', 18, 'Beijing', 'IT']

    ⑤ items()

    把键和值组成元组放在类似于列表的容器中

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    print(dic1.items())
    
    # 结果
    dict_items([('name', 'xiaoming'), ('age', 18), ('city', 'Beijing'), ('job', 'IT')])

    可以转换为列表list

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    lis = list(dic1.items())
    print(lis)
    
    # 结果
    [('name', 'xiaoming'), ('age', 18), ('city', 'Beijing'), ('job', 'IT')]

    可以遍历(一个变量遍历出来的是键值对组成的元组)

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    for i in dic1.items():
        print(i)
    
    # 结果
    ('name', 'xiaoming')
    ('age', 18)
    ('city', 'Beijing')
    ('job', 'IT')

    两个遍历遍历出来的分别是键和值

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    for k,v in dic1.items():
        print(k,v)
    
    
    # 结果
    name xiaoming
    age 18
    city Beijing
    job IT

    三、字典的公共方法

    dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
    print(len(dic1))            # 获取字典键值对的个数
    
    # 结果
    4

    四、分别赋值

    a,b = 10,20         # 将a和b分别赋值
    print(a,b)
    
    # 结果
    10 20
    a,b = [10,30]       # 将a和b分别赋值
    print(a,b)
    
    # 结果
    10 30
    a = 100
    b = 50
    a,b = b,a              # a 和 b 的值替换了
    print(a,b)
    
    # 结果
    50 100

    五、字典的嵌套

  • 相关阅读:
    题解【DP100题1~10】
    新博客已建好!
    题解【语文1(chin1)- 理理思维】
    题解【[BJOI2012]算不出的等式】
    题解【[HAOI2006]受欢迎的牛】
    题解【[FJOI2018]所罗门王的宝藏】
    Redis常用命令
    mysql table 最新更新时间
    中国翻译史阶记
    HTTP Session原理
  • 原文地址:https://www.cnblogs.com/st-st/p/9443445.html
Copyright © 2011-2022 走看看