zoukankan      html  css  js  c++  java
  • python中的数据类型之元组和字典

    一、元组:俗称不可变的列表,又被称为只读列表。元组用小括号括起来,里面可以放任何数据类型的数据,查询可以,循环也可以,切片也可以,但就是不能修改

    注意:如果元组中只有一个元素,一定要加一个逗号,否则就不是元组。

    >>> tu = (1,"Tanxu","A") #创建一个元组,用小括号括起来
    >>> type(tu)
    <class 'tuple'>
    >>> tu1 = ("Tanxu")#当小括号内只有一个元素时,不是元组
    >>> type(tu1)
    <class 'str'>
    >>> tu2 = ("Tanxu",)#元组只有一个元素时,要在该元素后加一个逗号
    >>> type(tu2)
    <class 'tuple'>
    >>> tu3 = ()#定义一个空元组
    >>> type(tu3)
    <class 'tuple'>

    注意:关于不可变,这里元组不可变的意思是子元素不可变【即元组没有修改操作】,而子元素内部的子元素可以改变,这取决于子元素是否是可变对象。【但是元组本身没有改变】

    >>> tu[2] = "Tan" #对元祖进行修改会报错
    Traceback (most recent call last):
      File "<pyshell#8>", line 1, in <module>
        tu[2] = "Tan"
    TypeError: 'tuple' object does not support item assignment
    
    >>> tu4 = ("Tan","xu",[89,93,94])
    >>> tu4[2][2] = 98 #可以对元素中子元素的子元素进行修改
    >>> tu4
    ('Tan', 'xu', [89, 93, 98])
    

     

    元组也有count、index、len等操作,用法同列表

    二、字典:字典是以{}括起来的,内部使用key:value的形式来保存数据。如{“jay”:”周杰伦”,”jj”:”林俊杰”}

      注意:字典的key必须是可哈希的,不可变的【列表是不可哈希的】

    补充:什么是可哈希的(hashable)不该改变的(imutable)?【来自官方文档翻译】

    如果一个对象在自己的生命周期中有一哈希值(hash value)是不可改变的,那么它就是可哈希的(hashable)的,因为这些数据结构内置了哈希值,每个可哈希的对象都内置了__hash__方法,所以可哈希的对象可以通过哈希值进行对比,也可以作为字典的键值和作为set函数的参数。所有python中所有不可改变的的对象(imutable objects)都是可哈希的,比如字符串,元组,也就是说可改变的容器如字典,列表不可哈希(unhashable)。我们用户所定义的类的实例对象默认是可哈希的(hashable),它们都是唯一的,而hash值也就是它们的id()。

    >>> dic1 = {'name':'Tanxu','sex':'女','age':18}
    >>> type(dic1)
    <class 'dict'>
    

     1、字典的相关操作:

      1)增加:

    >>> dic1 = {'name':'Tanxu','sex':'女','age':18}
    >>> dic1['height'] = 160 #直接添加,如果key重复了,会替换掉原来的value
    >>> dic1
    {'name': 'Tanxu', 'sex': '女', 'age': 18, 'height': 160}
    
    >>> dic1.setdefault('weight',45)#使用setdefault()添加元素时,返回的是value值;如果字典中存在了这个key,则不再进行保存操作
    45
    >>> dic1
    {'name': 'Tanxu', 'sex': '女', 'age': 18, 'height': 160, 'weight': 45}
    

      2)删除:

    >>> dic1.pop("weight")#删除一个元素,会返回这个元素对应的value值
    45
    
    >>> dic1.popitem()#删除一个元素,返回这个元素的key和value,返回的是一个元组。默认删除最后一个元素
    ('height', 160)

    >>> dic1.clear()#清空字典
    >>> dic1
    {}

      3)查询:

    >>> dic1 = {'name':'Tanxu','sex':'女','age':18}
    >>> dic1['name'] #如果key值存在,会返回其对应的value值;如果key值不存在,程序会报错
    'Tanxu'
    
    #get方法:1)可以通过key值获取value的值,如果key不存在,默认返回None
    >>> print(dic1.get("Tanxu"))
    None
    >>> print(dic1.get('name'))
    Tanxu
    
    #2)如果设置了默认返回值,则当key不存在时,返回该默认值
    >>> print(dic1.get('height','160'))
    160
    
    #setdefault操作==》1、首先判断原来的字典中有没有这个key,如果没有则执行添加
    #                 2、用这个key去字典中查询,返回查到的结果
    >>> ret1 = dic1.setdefault("name",1)
    >>> print(ret1)
    Tanxu
    
    >>> ret2 = dic1.setdefault("height",160)
    >>> print(ret2)
    160

      4d1.update(d2)  ==》把d2k-v更新到d1

    >>> dic1 = {'name':'Tanxu','sex':'女','age':18}
    >>> dic2 = {"height":"160","weight":"45"}
    >>> dic1.update(dic2)
    >>> dic1
    {'name': 'Tanxu', 'sex': '女', 'age': 18, 'height': '160', 'weight': '45'}
    

     2、字典的其他相关操作

      1)得到字典中的key,value以及键值对

    print(dict1.keys())  #拿到所有的key,返回key的集合,该集合可迭代循环
    ##for key in dict1.keys(): #循环遍历key值
    ##        print(key)
    
    print(dict1.values()) #拿到所有的value,返回value的集合,该集合可迭代循环
    ##for value in dict1.values(): #循环遍历value值
    ##        print(value)
    
    print(dict1.items()) #拿到所有的键值对,每一项都是元组,元组集合也可迭代
    ##for item in dict1.items():#循环遍历key:value键值对
    ##      print(item)#返回元组
    ##      print(item[0]) #返回key
    ##      print(item[1]) #返回value
    #遍历字典
    for k,v in dic1.items():
      print(k)
      print(v)

      2)解构,解包

    ##解构  解包
    a,b = (1,2) #即把a赋值为1,b赋值为2
    print(a)
    

      3)字典的嵌套

    dic = {
            "name":"Tanxu",
            "age":"19",
            "hobby":"listen music",
            "frend1":{
                     "name":"李四",
                      "age":"22",
                      "hobby":"writting"
                    },
             "frend2":{
                     "name":"王五",
                     "age":"19",
                     "hobby":"singing"
                    }
            }
    
    print(dic["frend1"]["name"]) 

    三、range操作(迭代循环)

    语法:

    range(开始,结束,步长)默认开始可以取到,结束取不到,步长可以为负数
    

    实例:

    1、循环:for i in range(10):   #打印0 - 9
    Print(i)
    2、循环:for i in range(3,9):   #打印3 - 8
    Print(i)
    3、循环:for i in range(3,10,2):   #打印3,5,7,9
    Print(i)
    4、循环:for i in range(10,1,-1):   #打印10,9,8,7,6,5,4,3,2
    Print(i)
    5、循环:for i in range(10,-10,-1):   #打印10,9,8,7,6,5,4,3,2,1,0,-1,-2,……,-9
    Print(i)
    

      

  • 相关阅读:
    ie6动态创建iframe无法显示内容的bug
    时间字符串解析
    自定义时间格式转换代码
    MySql存储过程异常处理示例
    解析数字签名的Substring结构
    自动输出类的字段及值
    深复制与浅复制的实现
    ie版本过低提示升级ie的示例
    Web安全攻防TCP/IP安全篇
    不同网段相互通信实验
  • 原文地址:https://www.cnblogs.com/tanxu05/p/9901790.html
Copyright © 2011-2022 走看看