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)

  

猜你喜欢

转载自www.cnblogs.com/tanxu05/p/9901790.html