四、Python数据类型(二)

时间:2021-06-09 00:22:04

一、布尔(Boolean)

  布尔类型的数据只有两个:(真)True和(假)False。多用于条件语句或者是作为函数返回值。

二、字典(dictionary)

  1、认识字典

  将数据组织成键值对(key-value)的形式。例如:‘name’:‘小明’。

其中,name称为键(key),小明为值(value)。拿到键就能在字典中找到相对应的值。

  注意: key必须是不可变的。value没有要求.可以保存任意类型的数据

  字典的定义:字典名 = {key-value……},定义时可以不立即给出给出键值对,也即定义一个空字典。另外需要注意的是字典内的键值对是无序的。也就是说无法通过索引得到值。

#定义一个简单字典示例
dict = {'name':'小明','身高':'175cm'}

  2、字典的增

  通过 “字典名[key]=value”的方式添加,如果字典中没有该key则添加新的键值对到字典中,如果已经存在,这改变原来的value的值。

dict = {}
dict['name'] = '小明'
dict['hight'] = '175cm'
print(dict)
"{'name': '小明', 'hight': '175cm'}"
dict['name'] = 'daming'
"{'name': 'daming', 'hight': '175cm'}"

  对于字典中已经存在了键,而又通过这个键添加新的value值,但是又希望不改变原来的值。这时候就需要用到setdefault()函数。它的作用是如果字典中已经存在键值对,添加失败。反之会将新的键值对添加进去。用法示例:

dict = {}
dict['name'] = '小明'
dict['hight'] = '175cm'
print(dict)
"{'name': '小明', 'hight': '175cm'}"
dict.setdefault('name','大明')
print(dict)
"{'name': '小明', 'hight': '175cm'}"
dict.setdefault('weight','60KG')
print(dict)
"{'name': '小明', 'hight': '175cm', 'weight': '60KG'}"

  同时,setdefault()有返回值。如果成功在字典添加了键值对,返回添加的数据,如上例中的“60KG”,添加失败返回字典中对应的值,如“小明”。

  3、字典的删

删除使用pop函数;示例:

person ={ 'name': '小明', 'hight': '175cm', 'weight': '60KG'}
person.pop('name')
print(person)

还可以使用popitem,资料显示这个函数是随机删除的,但是在Python3.6.7版本的开发环境中一直删除的是最后一个。

person ={ 'name': '小明', 'hight': '175cm', 'weight': '60KG'}
person.popitem()
print(person)
"{'name': '小明', 'hight': '175cm'}"

  4、字典的查

  1)通过键查询。存在返回对应的value,不存在报错。

person = { 'name': '小明', 'hight': '175cm', 'weight': '60KG'}
ret = person['name']
print(ret)

  2)get();通过健来查看,如果这个健不在这个字典中.就会返回None;另外,可以设置找不到对应键时的提示的语句,也就是返回值。

person = { 'name': '小明', 'hight': '175cm', 'weight': '60KG'}
ret = person.get('name')
ret2 = person.get('qian','查无此项')
print(ret)
print(ret2)
'小明'
'查无此项'

  5、字典的改

  第一种跟添加字典内容用的方法一样,不再多说。字典名[key]=value。

  第二种方法是使用update函数。同样的也是字典里有了就修改原值,没有就添加新的值。而且update能够批量添加或者修改数据。

person = { 'name': '小明', 'hight': '175cm', 'weight': '60KG'}
person.update({'sex':'男','number':'','name':'大明'})
print(person)
"{'name': '大明', 'hight': '175cm', 'weight': '60KG', 'sex': '男', 'number': '10110'}"

  6、字典的其他操作

  1)获取字典的所有键,keys()。将所有键放在列表中返回。

person = { 'name': '小明', 'hight': '175cm', 'weight': '60KG'}
ret = person.keys()
print(ret)
"dict_keys(['name', 'hight', 'weight'])"

  2)获取字典的值,values()。返回值是值的列表。

person = { 'name': '小明', 'hight': '175cm', 'weight': '60KG'}
ret = person.values()
print(ret)
"dict_values(['小明', '175cm', '60KG'])"

  3)获取字典的键值对,items()。返回键值对的列表。

person = { 'name': '小明', 'hight': '175cm', 'weight': '60KG'}
ret = person.items()
print(ret)
"dict_items([('name', '小明'), ('hight', '175cm'), ('weight', '60KG')])"

  7、字典嵌套

  原则:保证key是不可变的就行了。只要key不变,随便嵌套吧。示例:

dict = {
'country':'中国',
'province':{'p1':'湖北','p2':'湖南','p3':'上海'},
'citys':['北京','上海','深圳']
}
print(dict)

三、集合(set)

  1、集合介绍

  集合内元素是不可变的,每个元素都是独一无二的,而且是无须的。所以常用来去重。

set1 = {1,'','abc',True,1}
print(set1)# {'2', 1, 'abc'}
set2 = {'','abc',True,1}
print(set2)#{True, '2', 'abc'}
set3 = {'','abc',False,1,0}
print(set3)#{False, 1, '2', 'abc'}
set4 = {0,'','abc',False,1,0}
print(set4)#{0, 1, '2', 'abc'}

  集合内同时有1和True时,从左起先找到那个显示那个。0和false也是同样的情况。

  2、集合的增删查改

  增用add 和update

s = {"刘嘉玲", '关之琳', "王祖贤"}
s.add("郑裕玲")
print(s)
s.add("郑裕玲") # 重复的内容不会被添加到set集合中
print(s)
s = {"刘嘉玲", '关之琳', "王祖贤"}
s.update("麻花藤") # 迭代更新
print(s)
s.update(["张曼⽟", "李若彤","李若彤"])
print(s)
"""{'郑裕玲', '刘嘉玲', '王祖贤', '关之琳'}
{'郑裕玲', '刘嘉玲', '王祖贤', '关之琳'}
{'刘嘉玲', '花', '藤', '关之琳', '麻', '王祖贤'}
{'张曼⽟', '刘嘉玲', '花', '李若彤', '藤', '关之琳', '麻', '王祖贤'}"""

  删除

s = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟", "李若彤"}
item = s.pop() # 随机弹出⼀个.
print(s)
print(item)
s.remove("关之琳") # 直接删除元素.不存在这个元素. 删除会报错
print(s)
s.clear() # 清空set集合.需要注意的是set集合如果是空的. 打印出来是set() 因为要和字典区别

  修改;set集合中的数据没有索引。 也没有办法去定位⼀个元素。所以没有办法进⾏直接修改。我们可以采⽤先删除后添加的⽅式来完成修改操作。

s = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟", "李若彤"}
# 把刘嘉玲改成赵本⼭
s.remove("刘嘉玲")
s.add("赵本⼭")
print(s)

  查询;集合是可迭代对象,可以通过循环获取集合内的元素。

  3、集合的交,并等操作

s1 = {"刘能", "赵四", "⽪⻓⼭"}
s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"}
# 交集
# 两个集合中的共有元素
print(s1 & s2) # {'⽪⻓⼭'}
print(s1.intersection(s2)) # {'⽪⻓⼭'}
# 并集
print(s1 | s2) # {'刘科⻓', '冯乡⻓', '赵四', '⽪⻓⼭', '刘能'}
print(s1.union(s2)) # {'刘科⻓', '冯乡⻓', '赵四', '⽪⻓⼭', '刘能'}
# 差集
print(s1 - s2) # {'赵四', '刘能'} 得到第⼀个中单独存在的
print(s1.difference(s2)) # {'赵四', '刘能'}
# 反交集
print(s1 ^ s2) # 两个集合中单独存在的数据 {'冯乡⻓', '刘能', '刘科⻓', '赵四'}
print(s1.symmetric_difference(s2)) # {'冯乡⻓', '刘能', '刘科⻓', '赵四'}
s1 = {"刘能", "赵四"}
s2 = {"刘能", "赵四", "⽪⻓⼭"}
# ⼦集
print(s1 < s2) # set1是set2的⼦集吗? True
print(s1.issubset(s2))
# 超集
print(s1 > s2) # set1是set2的超集吗? False
print(s1.issuperset(s2))

  集合代码参考自:pythonav.com

四、元祖(tuple)

  元祖,数据不可变的数据的集合。集合内的数据只允许查看,不允许删除和修改值。需要注意的是,这里的不可变是子元素不可变. 而子元素内部的子元素是可以变,比如说列表和字典, 这取决于子元素是否是可变对象。而且,元祖内只有一个元素是要多加一个逗号。

  元祖通过索引访问元素:

tuple1 = ('w','我','你','')
print(tuple1[0],tuple1[1],tuple1[2])
'w 我 你'

  元祖是可迭代类型数据,可以使用循环读取元素值:

tuple1 = ('w','我','你','')
for item in tuple1:
print(item)

  元祖可以切片:

tuple1 = ('w','我','你','')
tu = tuple1[2:]
print(tu)