六、元组、字典、集合

学习目标

  • 能够定义和查找元组
  • 能够说出字典的特点
  • 能够对字典进行增删改查
  • 能够说出集合的特点
  • 能够对集合进行增删改查
  • 能够使用通用方法操作字符串、列表、元组、字典、集合

一、元组的使用

  • 元组和列表很像,都是用来保存多个数据。
  • 和列表一样,也是一个 有序的存储数据的容器
  • 元组和列表的区别在于,列表是可变的,而元组是不可变的
# 使用一对小括号 () 来表示一个元组
nums = (9,4,3,1,7,6)

# 可以通过下标来获取元素
nums[1] # 4,但是不能修改

# tuple包含的方法:index、count 参考列表中的使用方式

  • 特殊情况:表示仅有一个元素的元组时,使用 (ele,) 的形式(与()优先级括号要区分开)

二、字典的基本使用

# 使用大括号{}来表示一个字典,不仅有值 value,还有值的描述 key
# 字典里的数据都是以键值对 key-value 的形式保留的
# key 和 value之间使用冒号:来连接;多个键值对之间使用逗号,来分割
person = {'name':'zhangsan','age':18}

2.1 字典使用注意事项

  • 在字典中的 key 不允许重复,如果 key 重复了,后一个 key 对应的值会覆盖前一个
  • 字典里的 value 可以是任意的数据类型,但是 key 只能使用不可变数据类型,一般使用字符串

2.2 字典的增删改查

  • 查找数据(字典的数据在保存时,是无序的,不能通过下标来获取)
person = {"name":"zhangsan","age":18}
print(person['name']) # 使用key获取到对应的value

print(person['height']) # 如果要查找的key不存在,会直接报错

# 需要:获取一个不存在的key时,不报错,如果这个key不存在,使用默认值
# 使用字典的get方法
person.get('height') # None
# 如果根据key获取不到value,使用给定的默认值
person.get('gender','female') # female
  • 增加\修改数据
person = {'name':'zhangsan','age':18}
# 直接使用 key 可以修改对应的value
person['name'] = 'lisi'
# 如果 key 存在,是修改key对应的value;
# 如果 key 在字典里不存在,会往字典里添加一个新的键值对
person['gender'] = 'female' # person = {'name':'zhangsan','age':18,'gender':'female'}
  • 删除数据
# 把name对应的键值对删除了,执行结果是被删除的value
x = person.pop('name')
print(x) # lisi

# popitem 删除一个元素,结果是被删除的这个元素组成的键值对
result = person.popitem()
print(result) # ('gender','female')

# clear 清空一个字典
person.clear()

2.3 update方法的使用

# 列表可以使用extend方法将两个列表合并成为一个列表
nums1 = [1,2,3,4,5]
nums2 = [6,7,8,9]
nums1.extend(nums2)
print(nums1) # [1,2,3,4,5,6,7,8,9]

# 字典的update
person1 = {'name':'zhangsan','age':18}
person2 = {'addr':'襄阳','height':180}
person1.update(person2)
print(person1) # {'name':'zhangsan','age':18,'addr':'襄阳','height':180}

2.4 合并多个dict

# 对于多个列表、字符串、元组类型的数据,可以使用 + 合成一个新的同类型的数据
# list1 + list2 --> list3
# str1 + str2 --> str3
# tuple1 + tuple2 --> tuple3

# 对于合并多个字典dict类型数据
{**dict1,**dict2} --> dict3

2.5 字典的遍历

# 特殊在列表和元组是一个单一的数据,但是字典是键值对的形式

person = {'name':'zhangsan','age':18,'height':'180cm'}

# 第一种的遍历方式: 直接for...in循环字典
for x in person: # for ... in 循环获取的是key
    print(x,'=',person[x])

# 第二种方式:获取到所有的key,然后在遍历key,根据key获取value
for k in person.keys():
    print(k,'=',person[k])

# 第三种方式:获取所有的value
# 只能拿到值,不能拿到key
for v in person.value():
    print(v)

# 第四种方式:
for k,v in person.items(): # 把列表里的元素是元组,把元组当做整体进行遍历
    print(k,'=',v)

2.6 字典的推导式

person = {'a':100,'b':200,'c':300}
person_new = {v:k for k,v in person.items()} # dict{100:'a',200:'b',300:'c'}

三、集合的使用

3.1 set的使用

  • 集合(set)是一个 无序的不重复元素 序列,可以使用 大括号 {} 或者 set() 函数创建集合
    注意:创建一个空冰集合必须用 set() 而不是 {},因为 {} 是用来创建一个空字典
    创建格式:
param = {value01,value02,...}
# or
set(value)

3.2 set的操作

语法格式如下:

# 如果有重复的数据,会自动去除
names = {'zhangsan','lisi','jack','tony','jack'}
names.add('阿珂') # 添加一个元素

names.pop() # 随机删除一个
names.clear() # 清空集合
names.remove('jack') # 删除指定的元素

# 将多个集合合并生成一个新的集合
names.union({'刘能','赵四'})

# A.update(B)
# 将 B 拼接到 A 里
names.update({'刘能','赵四'})

3.3 集合的高级用法

first = {f1,f2,...}
second = {s1,s2,...}
third = {t1,t2,...}

# set 支持很多算术运算符
print(first - second) # 求差集
print(first & second) # 求交集
print(first | second) # 求并集
print(first ^ second) # 求差集的并集

四、eval与json

json本质是字符串,其按照指定的数据格式保存数据,是前端与后端交互的一种数据类型

  • 详细说明参见:2021.8.17 十三、文件操作.md
# JSON 的使用,把列表、元组、字典等转换成为JSON字符串
person = {'name':'zhangsan','age':18,'gender':'female'}
# 字典如果想要把它传给前端页面或者把字典写入到一个文件里
import json
m = json.dumps(person)  # dumps将字典、列表、集合、元组等转换成为JSON字符串
print(m) # "{'name':'zhangsan','age':18,'gender':'female'}" 

# 将json字符串转换为python数据类型
# 方法一:eval()内置函数
p = eval(m)
print(type(p)) # dict

# 方法二:json.loads() 可以将json字符串转换成为Python里的数据
s = json.loads(m)
print(type(s)) # dict
  • python与json中数据类型对应
    |python|json|
    |:-😐:-😐
    |True|true|
    |False|false|
    |字符串|字符串|
    |字典|对象|
    |列表、元组|数组|

五、可迭代对象通用方法

5.1 运算符

在Python里,常见的算术运算符,有一些可以使用于可迭代对象,它们执行的结果也稍有区别

运算符Python表达式结果描述支持的数据类型
+[1,2]+[3,4][1,2,3,4]合并(成新的可迭代对象)字符串、列表、元组
-{1,2,3,4} - {2,3}{1,4}集合求差集集合
*[‘Hi!’] * 4[‘Hi!’,‘Hi!’,‘Hi!’,‘Hi!’]复制字符串、列表、元组、字典
in3 in (1,2,3)True元素是否存在字符串、列表、元组、字典
not in4 not in (1,2,3)True元素是否不存在字符串、列表、元组、字典
# 特殊的使用 in 判断字典类型数据时,是判断key集合中是否存在
print('zhangsan' in {'zhangsan':12,'lisi':13})

5.2 带下标的遍历

# 带下标的遍历 enumerate 类的使用,一般用于列表和元组等有序的数据
names = ['zhangsan','lisi','wangwu']
for idx,ele in enumerate(names): # [(0,'zhangsan'),(1,'lisi'),(2,'wangwu')]
    print(idx,ele)
  • 28
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ModelBulider

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值