python基础学习-入门到精通(7-元组、字典和集合)

元组、字典和集合

7.1元组(tuple)

  • 元组是一个不可变序列
  • 元组不是空的,至少有一个,
  • 如果不希望数据改变,一般用元组
  • 元组的写法(),也可以不加(),但如上必须得有一个元素,后面跟逗号

元组的解包

  • 在对一个元组解包的时候,变量的数量要和元组中元素的数量保持一致
  • 如果变量和元素不一致,也可以在变量前面加上一个 *。这样会获取元组中剩余的元素,以列表形式返回

例如

tuple=1,2,3,'ab' 或者写成tuple=(1,2,3,'ab') 
a,b,*c=tuple
print(f'a={a}')     #这里的f 可以先看下第三章的占位符讲解
print(f'b={b}')
print(f'c={c}')

结果

a=1
b=2
c=[3, 'ab']

7.2字典(dict)

7.2.1字典

  • 数据结构 映射(mapping)
  • 字典的特点是查询性能好,但储存性能很差
  • 字典也称之为键值对(key-value结构)

7.2.2语法

{key:value,key:value…}
例如a={‘a’:1,‘b’:2,‘c’:3}
字典中的键是不能重复的,如果重复后面的会替换前面的

7.2.3字典的使用

命令 作用
dict() 创建字典
d= dict(name='陈世美',age=23)
print(d)
----------------------
{'name': '陈世美', 'age': 23}

扩展
dict()函数也可以将一个包含有双值子序列转换为字典,比如说[(),()] 这种列表是一个序列,里面的包含元素的元组也是一个序列,如果这个元组里面有两个值,就叫双值子序列。
例如
d = dict([(‘name’,‘陈世美’),(‘age’,23)]) ,结果如上


命令 作用
len() 获取字典中键值对的个数
d=len({'a':1,'b':2})
print(d)
------------
2

命令 作用
get() 根据键来获取字典当中的值
d= dict(name='陈世美',age=23)
print(d.get('age'))
--------------------------
23

扩展
get(key,[default]) 该方法是用来根据键来获取字典当中的值。
如果字典当中没有这个Key值,会返回一个None,也可以指定一个默认值。来作为第二个参数,这样获取不到Key值的时候就返回默认值.


命令 作用
update() 将其他字典当中的key-value添加到当前字典当中
d1 = {'a':1,'b':2}
d2 = {'c':3,'d':4}
d1.update(d2)
print(d1)
print(d2)
--------------------------
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
{'c': 3, 'd': 4}

命令 作用
del 删除字典中的key-value
d = {'a':1, 'b':2}
del d['a']
print(d)
--------------------
{'b': 2}

命令 作用
setdefault(key,[default]) 向字典中添加 key-value(如果key存在返回value,没有则添加)
d = {'a':1, 'b':2}
a=d.setdefault('c',3)
print(a)
print(d)
--------------------
3
{'a': 1, 'b': 2, 'c': 3}

命令 作用
pop(key,[default]) 根据Key来删除 key-value(如果这个key不存在,返回则会报错,但是也可以添加默认返回的报错内容,则不会报错)
d={'c': 3, 'd': 4, 'e': 5}
result = d.pop('c')
print(result)
print(d)
--------------------
3
{'d': 4, 'e': 5}

命令 作用
copy() 浅复制只会复制字典的本身,如果字典中还有个字典是不会被复制的(复制的变量如果更改字典里面的字典,则会更改原复制对象)
d = {'a':{'name':'陈','age':23},'b':2,'c':3}
d1 = d.copy()
d1['a']= '1'
print('d = ',d,id(d))
print('d1 =',d1,id(d1))
--------------------------------------------------
d =  {'a': {'name': '陈', 'age': 23}, 'b': 2, 'c': 3} 2677564722456
d1 = {'a': '1', 'b': 2, 'c': 3} 2677564727448

但是如果这么更改,则两个变量都会变化,因此只是浅复制。

d = {'a':{'name':'陈','age':23},'b':2,'c':3}
d1 = d.copy()
d1['a']['name']= 'hi'
print('d = ',d,id(d))
print('d1 =',d1,id(d1))
--------------------------------------------------------
d =  {'a': {'name': 'hi', 'age': 23}, 'b': 2, 'c': 3} 1942382005528
d1 = {'a': {'name': 'hi', 'age': 23}, 'b': 2, 'c': 3} 1942382010520

7.2.4字典的修改

d[‘name’] = ‘陈圆圆’ # 修改字典中的key-value(key存在的情况下)
d[‘phone’] = ‘123456789’ # 向字典中添加 key-value(key不存在查询不到的请情况下)

7.2.5遍历字典

  • d.keys() 该方法返回的是一个序列,保存的是字典中所有的键
  • d.values() 该方法返回的是一个序列,保存的是字典中的值
  • d.items() 该方法会返回字典中所有的项 。它返回的也是一个序列,这个序列当中包含有双值子序列,双值就是字典中的key-value
d = {'a':1, 'b':2}
for m in d.keys():
    print(m)
-----------------------
a
b
d = {'a':1, 'b':2}
for n in d.values():
    print(n)
------------------------------
1
2    
for m,n in d.items():

    print(m,n)
------------------------
a 1
b 2

7.3集合(set)

7.3.1 集合

集合和列表非常相似,但是有所不同,不同点如下

  • 集合只能储存不可变对象
  • 储存的对象是无序的
  • 集合不能出现重复元素(出现了打印出来的也只有一个)

举例
d={1,2,3,4,5} <------这就是一个集合

set() 可以将序列和字典转换为集合,将字典转换为集合的时候,只会包含字典中的键。

s = set({'a':1,'b':2,'c':3}) 
print(s, type(s))
---------------
{'c', 'a', 'b'}    #对应上面的无序哦

7.3.2集合的运算

s1 = {1,2,3,4}
s2 = {3,4,5,6}

运算 举例 结果
交集 & r = s1 & s2 {3, 4}
并集 | r = s1 | s2 {1, 2, 3, 4, 5, 6}
差集运算 - r = s1 - s2或(r=s2-s1) {1,2} 或 ({5, 6})
异或集运算 ^ r = s1 ^ s2 {1, 2, 5, 6}

注:结果省略print(r)


返回的是布尔类型
a = {1,2,3}
b = {1,2,3,4,5}

符号 举例 结果
<= 检查一个集合是否是另一个集合的子集 r = a <= b True
< 检查一个集合是否是另一个集合的真子集 r = a < b True
>=检查一个集合是否是另一个集合的超集 r=a >=b False
>检查一个集合是否是另一个集合的真超集 r=a >b False

注:结果省略print(r)

7.3.3集合的使用

s = {‘a’,1,2,3}

命令 作用 举例 结果
add() 向集合中添加元素 s.add(4) {‘a’, 2, 3, 4, 1}
remove() 删除集合中指定的元素 s.remove(a) {3, 1, 2}
update() 将一个集合中的元素添加到另一个集合中 s.update({‘m’,5}) {1, 2, 3, 5, ‘m’, ‘a’}
pop() 随机删除某一个元素 s.pop() {2, 3, ‘a’}

你可能感兴趣的:(python)