基础--7、元组and字典and集合

在这里插入图片描述

一、元组

  • 元组表现形式是tuple,用()表示
  • 例如:tuple1 = (1,2,3,4)
  • 元组是一个不可变序列(一般我们希望数据不改变时,我们使用元组,其他情况下基本使用列表)
  • 索引[ ]在元组中同样适用
  • 元组如果不是空元组至少有一个逗号(,)当元组不是空元组时括号可以省略
tuple2 = (10,)
tuple2 = 10,
print(type(tuple2))
  • 元组解包:是指将元组当中的每一个元素都赋值给一个变量
    例如:
tuple1 = (1,2,3,4)
a,b,c,d = tuple1
print(a,b,c,d)
a,b,*c = tuple1
print(a,b,c)# 匹配出列表[]

结果:

1 2 3 4
1 2 [3, 4]
  • 字符串的解包:将字符串的每个元素赋值给一个变量
    例如:
s = 'abcdef'
a,b,*c = s
print(a,b,c)

结果:

a b ['c', 'd', 'e', 'f']
  • 列表的拆包:将列表的每个元素赋值给一个变量
    例如:
list1 = [1,2,3,4]
a,b,*c = list1
print(a,b,c)

结果:

1 2 [3, 4]

二、字典

  • 字典的表示方法:用{ }表示,里面的数据元素的表现形式是key-value形式,即–名称:数据,key:valie
  • 字典的定义:字典和列表类似,也是可变序列,只是与列表不同,它是无序的可变序列,保存的内容是以“键——值对”的形式存放,这类似于我们使用查找汉字的新华字典,它可以把拼音和汉字串起来,通过拼音音节表来快速查找到想要找的汉字。其中新华字典里面的音节表相当于键(key)对应的汉字相当于值(value)。键是惟一的,而值可以是多个。
  • 例如
    创建一个空的字典:dict1 = { }
  • 字典的主要特征:
    • 1.通过键(key)而不是通过索引来读取
      字典也称为关联数组或者散列表(hash),提示通过键(key)将一系列的值(value)联系起来,所以想要读取字典必须通过键(key)来读取,而不能通过索引来读取
      注:因为字典是无序的可变序列,所以所以索引的下标并不存在,索引无效。

    • 2.字典是任意对象的无序组合
      字典是无序的,各项是从左到右随机排序的,及保存在字典当中的项没有特定的顺序,这样可以提高查找速度。

    • 3.字典是可变的,并且是可以任意嵌套
      字典可以在任意处正常或缩短(无需生成一份副本)并且他支持任意深度的嵌套(字典的值可以使列表或者其他子字典)(字典的深拷贝与浅拷贝)

    • 4.字典中的键必须是唯一
      不允许同一个键出现两次,如果出现两次,则后一个值会被记住,第一个会被忘记。(当字典中的key有重复的,后面的回替换前面的。)

    • 5.字典中的键必须不可变
      字典中的键是不可改变的,所以可以使用数字、字符串或者元组,但不能使用列表。
      注:当字典中的键(key)重复的时候,后面的会覆盖前面的。

三、字典的使用

  • 双值子序列
    例如:
['ab','cd']
  • 双值序列:序列中有两个值
    例如:
[1,2],'ab',(a,b)
  • 子序列:序列中的元素也是序列
    例如:
  ['a']
  • 创建字典:通过双值子序列创建
    例如;
dict3 = dict(([('name','郭靖'),('age',30 ),('gender','男')]))

四、字典的增删改查

4.1 len()函数

  • len()函数:获取字典中键值对的个数
    • 例如:
dict1 = {'name':'郭靖',
         'age': 30 ,
         'gender':'男',
         'name1':'黄蓉'
         }
print(len(dict1))

4.2in not in 语句

  • in not in----检验字典中是否(不)包含指定的键
    • 例如:
dict1 = {'name':'郭靖',
         'age': 30 ,
         'gender':'男',
         'name1':'黄蓉'
         }
print('name' in dict1)  # not in 同理

4.3 通过键(key)来获取字典中的值(value)(查找方式)

  • 语法:dict[key]
  • 例如:
dict1 = {'name':'郭靖',
         'age': 30 ,
         'gender':'男',
         'name1':'黄蓉'
         }
print(dict1['name1'])

4.4 get()函数(查找方式)

  • get(key, default)----通过key来获取value 其中default是一个默认值(返回值)
  • 语法:字典.get(‘key’,‘value’)—value可有可无
  • 例如:
dict1 = {'name':'郭靖',
         'age': 30 ,
         'gender':'男',
         'name1':'黄蓉'
         }
print(dict1.get('ag1','没有找到'))
print(dict1.get('age'))

4.5 修改字典: 通过key来修改value

  • 语法:dict[key] = value
  • 特性:如果key值不存在,则向字典中添加一个key:value
  • 例如:
dict1 = {'name':'郭靖',
         'age': 30 ,
         'gender':'男',
         'name1':'黄蓉'
         }
dict1['gongfu'] = '五毒拍砖掌'  # 特性实例展示
dict1['name'] = '黄老邪' # 修改字典实例展示
print(dict1)

4.6 setdefault(key, default)(添加方法)

  • setdefault(key, default):向字典中添加key:value
  • 字典名.setdefault(‘key’,‘value’)
  • 特性:
    1.如果这个key已经存在与字典中,则返回value值,不会对字典有任何影响。
    2.如果key不存在,则向字典中添加key:value。
  • 例如:
dict1 = {'name':'郭靖',
         'age': 30 ,
         'gender':'男',
         'name1':'黄蓉'
         }
result = dict1.setdefault('name','黄老邪')# 特性1展示实例
# result1 = dict1.setdefault('name3','郭襄')# 特性2展示实例
print(result,dict1)
# print(result1,dict1)

4.7 update()(添加方法)

  • update()将其他字典中的key-value添加到当前字典中
  • 语法:字典2.update(字典1) ----将字典1添加进字典2
  • 例如;
d1 = {
    1 : '1',
    2 : '2'
    }
dict1 = {'name':'郭靖',
         'age': 30 ,
         'gender':'男',
         'name1':'黄蓉'
         }
dict1.update(d1)
print(dict1)

4.8 del(删除方法)

  • del 删除字典中的ley-value
  • 语法:字典 = 字典名.popitem()—打印输出字典
  • 例如:
dict1 = {'name':'郭靖',
         'age': 30 ,
         'gender':'男',
         'name1':'黄蓉'
         }
del dict1['name1']
print(dict1)

4.9 popitem()(删除方法)

  • popitem()随机删除一个键值对,一般默认删除最后一个
  • 语法:字典 = 字典.popitem()—打印输出字典
  • 特性:它会将删除之后的键值对作为返回值返回,返回的是一个元组,第一个元素是key,第二个元素是value
  • 例如:
dict1 = {'name':'郭靖',
         'age': 30 ,
         'gender':'男',
         'name1':'黄蓉'
         }
result = dict1.popitem()
# print(result) # 特性展示实例
print(dict1)

结果:

('name1', '黄蓉')
{'name': '郭靖', 'age': 30, 'gender': '男'

4.9.1 pop()(删除方法)

  • pop(key,defualt)根据key来删除key-value
  • 语法:字典1 = 字典.pop(key)----打印输出print(字典1,字典)
  • 特性:删除key-value并返回value
  • 例如:
# dict1 = {'name':'郭靖',
#          'age': 30 ,
#          'gender':'男',
#          'name1':'黄蓉'
#          }
# result = dict1.pop('name1')
# print(result,dict1)

结果:

黄蓉 {'name': '郭靖', 'age': 30, 'gender': '男'}

4.9.2 clear()(删除方法)

  • clear() 清空字典
  • 语法:字典.clear()
  • 例如:
dict1 = {'name':'郭靖',
         'age': 30 ,
         'gender':'男',
         'name1':'黄蓉'
         }
dict1.clear()
print(dict1)

结果:

{}

五、字典的深浅拷贝

  • 深拷贝与浅拷贝的定义:
    • 深拷贝:假设B复制了A,当修改A的某一项数据,而B的数据未改变,则称之为深拷贝
    • 浅拷贝:假设B复制了A,当修改A的某一项数据,而B的数据发生改变,则称之为浅拷贝
      1.字典的浅拷贝:
  • 语法:
    • 字典名(B) = 字典名(A).copy()
    • 字典名(A)[key] = value # 修改字典
  • 例如:
    浅拷贝
dict1 = {'name':'刘亦菲',
         'age': 18 ,
         'gender':'女',
         'a': {'name' : '周慧敏',
               'age' : '21',
               }
         }
dict2 = dict1.copy()
print(id(dict1),id(dict2))
print(id(dict1['a']), id(dict2['a']))

结果:

/Volumes/苹果微软公共盘/PycharmProjects/venv/bin/python /Volumes/苹果微软公共盘/PycharmProjects/基础班第11/day-07/上课代码/字典的深拷贝与浅拷贝.py
140677664519488 140677664519808
140677664519424 140677664519424

Process finished with exit code 0

2. 字典的深拷贝:
注:把所有层次的数据重新拷贝成为一个新的对象

  • 语法:
    导包—import copy
    字典名(B) = copy.deepcopy(字典名(A))
    字典名(A)[key] = value # 修改字典
    • 例如:
import copy
dict1 = {'name': '刘亦菲',
         'age': 18,
         'gender': '女',
         'a': {'name': '周慧敏',
               'age': '21',
               }
         }
dict2 = copy.deepcopy(dict1)
print(id(dict1), id(dict2))
print(id(dict1['a']), id(dict2['a']))

结果:

/Volumes/苹果微软公共盘/PycharmProjects/venv/bin/python /Volumes/苹果微软公共盘/PycharmProjects/基础班第11/day-07/上课代码/字典的深拷贝与浅拷贝.py
140441184396096 140441197411008
140441184396032 140441197509760

Process finished with exit code 0

总结:当改变字典dict1时,dict2未发生变化

拓展:

id()函数可以返回对象的内存位置

六、字典的遍历

1 . 通过value,进行遍历

  • 语法:dict.value()
  • 特性:通过dict.value() 遍历字典,返回的是一个序列,保存的是字典中所有的值(value)。
  • 例如:
dict1 = {'name':'郭靖',
         'age': 30 ,
         'gender':'男',
         'name1':'黄蓉'
         }
print(dict1.values())

2 .通过key,进行遍历

  • 语法:dict.keys()
  • 通过dict.keys() 遍历字典,返回的是一个序列,保存的是字典中所有的键(key)。
  • 例如:
dict1 = {'name':'郭靖',
         'age': 30 ,
         'gender':'男',
         'name1':'黄蓉'
         }
print(dict1.keys())
for k in dict1.keys():
    print(dict1[k])

3.dict.items()

  • 返回字典中所有的项,返回的是一个序列,这个序列中包含双值子序列,双值就是字典中的key-value
  • 语法:for key,value in dict1.items():。
  • 输出: print(key, ‘=’, value)
  • 例如:
dict1 = {'name':'郭靖',
         'age': 30 ,
#          'gender':'男',
         'name1':'黄蓉'
         }
print(dict1.items())
for k,v in dict1.items():
    print(k, '=' , v)

结果:

dict_items([('name', '郭靖'), ('age', 30), ('name1', '黄蓉')])
name = 郭靖
age = 30
name1 = 黄蓉

七、集合

集合的表示方法:set{}

1 .集合只能存在不可变的对象

  • set1 = {(1,2),‘ab’,True,None}
    print(set1)

2 .集合中存储的对象是无序的,没有索引

  • set1 = {5,10,7}
    print(set1)

3 .集合不能出现重复的元素----去重set()

  • set1 = {1,(1,2),‘ab’,True,None}
    print(set1)

4 .创建集合

  • set1 = {}
    set1 = set()
    print(set1,type(set1))

5 . 去重操作

  • list1 = [1,2,3,4,5,1,2,3,6,7]
    n = set(list1)
    print(n)

6 .将字典转换为集合的时候,只会包含字典当中的key

  • dict1 = {1: ‘1’,2: ‘2’}
    n = set(dict1)
    print(n)

八、集合的运用

8.1 in not in语句

  • in not in----检验集合中是否(不)包含指定的元素
  • 例如;
set1 = {(1,2),'ab',True,None}
print('ab' in  set1)

8.2len()函数

  • len()–得出集合内元素的个数
  • 例如:
set1 = {(1,2),'ab',True,None}
print(len(set1))

8.3 set.add()

  • set.add()向集合中添加元素
  • 例如:
set1 = set()
set1.add(1)
print(set1)

8.4 set.update()

  • set.update() ----将一个集合中的元素添加到另一个集合中
  • 例如:
s1 = set('hello')
s2 = set('python')
s1.update(s2)
print(s1)

8.5 set.pop()

  • set.pop()—随机删除集合中的一个项
  • 例如:
set1 = {'a','b',1,2}
r = set1.pop()
print(set1)
print(r)

8.6 set.remove()

  • set.remove()—删除集合中指定的项
  • 例如:
set1 = {'a','b',1,2}
set1.remove('a')
print(set1)

结果:

{1, 2, 'b'}

8.7 set.clear()

  • set.clear()—清空集合中的项
  • 例如:
set1 = {'a','b',1,2}
set1.clear()
print(set1)

结果:

set()

扩展:可变类型与不可变类型
1、不可变类型:Number(数字)、String(字符串)、Tuple(元组)。
2、可变类型:可以变:Set(集合)、List(列表)、Dictionary(字典)。

作业习题

作业1:

'''
a = {"name":"123","data":{"result":[{"src":"python1"},{"src":"python2"},{"src":"python3"}]}} 找到python1/python2/python3
'''

分析+代码:

# 1.首先确定我们需要找到值(value)
#   value在第三个元素的value中

# 2.通过get()函数取出第二元素的值(value)
b = a.get("data")
# print(b) #检验是否将第二项元素value元素取出并创建新的字典B

# 3.通过get()函数取出第三元素的值(value)
c = b.get("result")
# print(c)# 检验是否创建了新的列表C
# c = [{'src': 'python1'}, {'src': 'python2'}, {'src': 'python3'}]
# 4.将列表c的元素取出生成新的字典d1 d2 d3
d1 = c[0]
d2 = c[1]
d3 = c[2]
#d3 = c.pop(2)
# print(d1,d2,d3)
# 5.打印出value
print(d1['src'])
print(d2['src'])
print(d3['src'])


结果:

python1
python2
python3

在这里插入图片描述
作业2:

'''
有如下值集合[11,22,33,44,55,66,77,88,99,90], 将所有大于66的值保存至字典的第一个key的值中,将小于66值保存至第二个key的值中。
'''

分析+代码:

list0 = [11,22,33,44,55,66,77,88,99,90]
# 分析:
# 1.建立两个空的列表
list1 = [] # 大于66,key1
list2 = [] # 小于66,key2
# 2.建立一个空的字典
dict1 = {}
# 3.通过 for in 遍历list0,通过条件判断语句判断
for i in list0:
    if i < 66 :
        list2.append(i) # list.append()向列表最后添加一个元素
    elif i == 66:
        continue
    else:
        list1.append(i)
# setdefault(key, default):向字典中添加key:value
dict1.setdefault('key2',list2)
dict1.setdefault('key1',list1)
print(dict1)

结果:

{'key1': [77, 88, 99, 90], 'key2': [11, 22, 33, 44, 55]}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值