zoukankan      html  css  js  c++  java
  • 【python】-- 元组、字典

    元组

    元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表

    用途:一般情况下用于自己写的程序能存下数据,但是又希望这些数据不会被改变,比如:数据库连接信息等

    1.访问元祖

    1 >>> name = ('a','b','c','d')
    2 #下标值跟列表一样,也是从0开始
    3 >>> name[0]
    4 'a'
    5 >>> name[1]
    6 'b'
    7 #访问最后一个元素
    8 >>> name[-1]
    9 'd'

    2,count(统计) 与 index(索引)

    # count 统计元素数量
     name = ('a','b','c','a')
     name.count('a') # 2
    
    # index 查看元素下标
    name = ('a','b','c','a')
    name.index('b')# 1
    View Code

    3、修改元组 删除元祖

    #元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例:
    tup1 = (12, 34.56);
    tup2 = ('abc', 'xyz')
    
    # 以下修改元组元素操作是非法的。
    # tup1[0] = 100
    
    # 创建一个新的元组
    tup3 = tup1 + tup2;
    print (tup3) #(12, 34.56, 'abc', 'xyz')
    
    
    
    #元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,如下实例:
    #!/usr/bin/python3
    
    tup = ('Google', 'Runoob', 1997, 2000)
    
    print (tup)
    del tup;
    print ("删除后的元组 tup : ")
    print (tup) # NameError: name 'tup' is not defined

    小结:

    ①元组中的数据不可以被修改,不可以被添加,不可以被删除(当然除非是元组中嵌套列表或者字典,列表和字典中的值是可以被更改的)

    ②元组的获取元素的方式和列表一样,都是通过下标值访问,下标值都是从0开始

    ③由于元组只能读,不能写,所以元组只有count和index两个方法

    ④元组的切片功能和列表一样

    字典

    字典是另一种可变容器模型,且可存储任意类型对象。

    字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

    d = {key1 : value1, key2 : value2 }

    一、特征:

    字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行

    1、字典是无序的;

    2,字典的key是唯一的,不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:

    dict = {'Name': 'QQ', 'Age': 7, 'Name': 'DD'}
    
    print ("dict['Name']: ", dict['Name']) # DD

    3、键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行,如下实例:

    dict = {['Name']: 'Runoob', 'Age': 7}
    
    print ("dict['Name']: ", dict['Name']) # TypeError: unhashable type: 'list'

     

    二、基本用法:增加、查看、修改、删除

    1、增加

    >>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
    #新增
    >>> stu_info["wanger"] = 30
    #输出结果
    >>> stu_info
    {'wanger': 30, 'lisi': 18, 'zhangsan': 23, 'qigao': 18}

    2、修改

    >>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
    #修改'qigao'对应的value值,由18改为23
    >>> stu_info["qigao"] = 23
    #输出
    >>> stu_info
    {'wanger': 30, 'lisi': 18, 'zhangsan': 23, 'qigao': 23}

     3、删除(del、pop、popitem)

    del

    >>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
    >>> del stu_info['qigao']
    #结果输出
    >>> stu_info
    {'zhangsan': 23, 'lisi': 18}

    注:如果是del stu_info的话,则是删除stu_info这个变量

    pop

    >>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
    #删除时给出提示
    >>> stu_info.pop("qigao")
    18
    #输出结果
    >>> stu_info
    {'zhangsan': 23, 'lisi': 18}

    popitem

    >>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
    #随机删除的元素
    >>> stu_info.popitem()
    ('lisi', 18)
    #输出结果
    >>> stu_info
    {'zhangsan': 23, 'qigao': 18}

    4、查

    通过key查找value

    >>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
    #存在key返回value
    >>> stu_info["qigao"]
    18
    #不存在key提示报错
    >>> stu_info["wanger"]
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    KeyError: 'wanger'

    通过get(key) 查找value

    >>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
    #存在则返回对应的value
    >>> print(stu_info.get("qigao"))
    18
    #不存在返回None
    >>> print(stu_info.get("wanger"))
    None

    注:get(k)不存在key值,则返回None,通过key直接访问会报错,所以建议推荐用get(k)这个方法获取value

    通过key in 字典判断  key是否存在与字典中

    >>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
    >>> "qigao"  in stu_info  #标准用法,在Python3和Python2.7都可以用
    True

    5、多级字典嵌套及操作

    av_catalog = {
        "欧美":{
            "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
            "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
            "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
            "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
        },
        "日韩":{
            "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
        },
        "大陆":{
            "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
        }
    }
     
    av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"
    print(av_catalog["大陆"]["1024"])
    #ouput
    ['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']

    三、字典的内置方法:

    #clear()  删除字典内所有元素
    dict = {'Name': 'Zara', 'Age': 7}
    
    print ("字典长度 : %d" %  len(dict)) 
    dict.clear()
    print ("字典删除后长度 : %d" %  len(dict))
    
    #字典长度 : 2
    #字典删除后长度 : 0
    
    #--------------------------------------------------------------------
    
    #copy() 返回一个字典的浅复制
    dict1 = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
     
    dict2 = dict1.copy()
    print ("新复制的字典为 : ",dict2) #新复制的字典为 :  {'Age': 7, 'Name': 'Runoob', 'Class': 'First'}
    
    #--------------------------------------------------------------------
    # fromkeys() 函数用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值
    
    seq = ('name', 'age', 'sex')
    
    dict = dict.fromkeys(seq)
    print ("新的字典为 : %s" %  str(dict))
    
    dict = dict.fromkeys(seq, 10)
    print ("新的字典为 : %s" %  str(dict))
    #新的字典为 : {'age': None, 'name': None, 'sex': None}
    #新的字典为 : {'age': 10, 'name': 10, 'sex': 10}
    
    #--------------------------------------------------------------------
    #get() 函数返回指定键的值,如果值不在字典中返回默认值。
    dict = {'Name': 'Runoob', 'Age': 27}
    
    print ("Age 值为 : %s" %  dict.get('Age'))
    print ("Sex 值为 : %s" %  dict.get('Sex', "NA"))
    
    #Age 值为 : 27
    #Sex 值为 : NA
    
    
    #--------------------------------------------------------------------
    # items() 方法以列表返回可遍历的(键, 值) 元组数组。
    dict = {'Name': 'Runoob', 'Age': 7}
    
    print ("Value : %s" %  dict.items())
    #Value : dict_items([('Age', 7), ('Name', 'Runoob')])
    
    #--------------------------------------------------------------------
    
    keys(), values()方法以列表返回一个字典所有的键,值
    dict = {'Name': 'QQ', 'Age': 7}
    
    print ("字典所有的键为 : %s" %  dict.keys())
    print ("字典所有值为 : ",  list(dict.values()))
    #字典所有的键为 : dict_keys(['Age', 'Name'])
    #"字典所有值为 : ",  ["QQ","7"]
    
    #--------------------------------------------------------------------
     #setdefault() 方法和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值
    dict = {'Name': 'Runoob', 'Age': 7}
    
    print ("Age 键的值为 : %s" %  dict.setdefault('Age', None))
    print ("Sex 键的值为 : %s" %  dict.setdefault('Sex', None))
    print ("新字典为:", dict)
    #Age 键的值为 : 7
    #Sex 键的值为 : None
    #新字典为: {'Age': 7, 'Name': 'Runoob', 'Sex': None}
    
    #--------------------------------------------------------------------
     #update() 函数把字典dict2的键/值对更新到dict里。
    dict = {'Name': 'Runoob', 'Age': 7}
    dict2 = {'Sex': 'female' }
    
    dict.update(dict2)
    print ("更新字典 dict : ", dict)
    #更新字典 dict :  {'Sex': 'female', 'Age': 7, 'Name': 'Runoob'}

     四、循环字典

    方法1:

    1 for key in dict:
    2     print(key,dict[key])

    方法2:

    1 for k,v in info.items(): #会先把dict转成list,数据量大时莫用
    2     print(k,v)

    注:

    ①方法1的效率比方法2的效率高很多

    ②方法1是直接通过key取value

    ③方法2是先把字典转换成一个列表,再去取值

    ④当数据量比较大的时候,用第二种方法时,字典转换成列表的这个过程需要花大量的时间老转换,当然数据量不大,没有关系,效率差不多

  • 相关阅读:
    Accoridion折叠面板
    mui列表系列
    按照中文首字母排序查询表数据
    五分位算法
    springmvc添加拦截器
    springmvc添加定时任务
    通过后台解决跨域调用接口问题
    eclipse搭建ssm框架
    Java 将图片转成base64,传到前台展示
    用mysql存储过程代替递归查询
  • 原文地址:https://www.cnblogs.com/Keep-Ambition/p/7190565.html
Copyright © 2011-2022 走看看