Python之字典、元组、集合

一、字典

列表:有序序列(第一个放进列表的元素在第一个位置)
字典:无序序列(第一个放进字典的元素可能不在第一个位置),key不允许重复,value可以重复
放在字典中的键:不可变序列(即键不可以为list等),不可执行增删改
'''可变序列:列表、字典、集合,对象地址不发生改变'''
'''不可变序列:字符串、元组'''

1、创建字典

# 1、使用花括号{}创建
scores = {'张三':100,'李四':90,'王五':98} # 键值对{key:value}
print(scores,type(scores)) # {'张三': 100, '李四': 90, '王五': 98} <class 'dict'>
# 2、使用内置函数创建
s = dict(name='jace',age=20) # {'name': 'jace', 'age': 20}
print(s)
# 空字典
d = {} 
print(d) # {}

2、字典元素的获取

scores = {'张三':100,'李四':90,'王五':98}

# 方法一 当查找的键不存在,会报错
print(scores['张三']) # 100
# 方法二 当查找的键不存在,不会报错,默认返回None
print(scores.get('张三')) # 100
print(scores.get('ddd',11111)) # 不会报错 11111

3、key的判断

scores = {'张三':100,'李四':90,'王五':98}
print('张三' in scores) # Ture
print('张三' not in scores) # False

4、字典元素的增删改

scores = {'张三':100,'李四':90,'王五':98}
# 1、字典元素删除
del scores['张三'] 
# scores.clear() # 清空字典所有元素
print(scores) # {'李四': 90, '王五': 98}
# 2、字典元素新增
scores['ddd'] = 99
print(scores) # {'李四': 90, '王五': 98, 'ddd': 99}
# 3、字典修改
scores['王五'] = 100
print(scores) # {'李四': 90, '王五': 100, 'ddd': 99}

5、获取字典视图

keys = scores.keys() # 获取所有键
values = scores.values() # 获取所有值
items = scores.items() # 获取所有键值对
print(keys,values,items) # dict_keys(['李四', '王五', 'ddd']) dict_values([90, 100, 99]) dict_items([('李四', 90), ('王五', 100), ('ddd', 99)])
print(list(keys),list(values),list(items)) # ['李四', '王五', 'ddd'] [90, 100, 99] [('李四', 90), ('王五', 100), ('ddd', 99)]

6、字典的遍历

for i in scores:
    print(i,scores[i],scores.get(i))
# 李四 90 90
# 王五 100 100
# ddd 99 99

7、字典生成式

# 内置函数zip():用于将可迭代的对象作为参数,将对象中的元素打包成一个元组,然后返回由这些元组组成的列表
# {item.upper():price for item,price in zip(item,prices)}
items = ['ss','dd','ff']
prices = [1,2,3]
lst = zip(items,prices)
print(list(lst)) # [('ss', 1), ('dd', 2), ('ff', 3)]

二、元组

# 1、元组创建方式
# (1)使用小括号
t1 = ('Python','world',11) # 或 t1 = 'Python','world',11
print(t1,type(t1)) # ('Python', 'world', 11) <class 'tuple'>

# (2)使用内置函数tuple()
t2 = tuple(('Python','world',22))
print(t2,type(t2)) # ('Python', 'world', 22) <class 'tuple'>

# 只包含一个元组的元素需要使用逗号和小括号
t3 = ('Python',)
print(t3,type(t3)) # ('Python',) <class 'tuple'>
# 空元组
t0 = ()
t00 = tuple()

t = (10,[2,3,4],44)
# 不可以执行t[1]=100,但可以修改列表里的内容,列表id不变
t[1].append(100)
print(t) # (10, [2, 3, 4, 100], 44)

# 2、元组的遍历
for i in t:
    print(i)
# 10
# [2, 3, 4, 100]
# 44

元组相加:

t1 = (1,2,3,4)
t2 = (5,6,7,8)
print(t1 + t2)  # (1, 2, 3, 4, 5, 6, 7, 8)
print(t1 + (t2,))  # (1, 2, 3, 4, (5, 6, 7, 8))

元组与列表的区别:

元组是不可变的,列表是可变的

三、集合

集合是没有value的字典,元素不能重复

1、集合的创建

# (1)直接{}
s1 = {1,2,3,4,4,5,6} # 集合中的元素不能重复,重复的会被去掉
print(s1,type(s1)) # {1, 2, 3, 4, 5, 6} <class 'set'>

# (2)使用内置函数set()
s2 = set(range(5))
print(s2,type(s2)) # {0, 1, 2, 3, 4} <class 'set'>

s3 = set([1,1,2,3,4,4,4,5]) # 列表转集合
print(s3,type(s3)) # {1, 2, 3, 4, 5} <class 'set'>

s4 = set((1,2,2,3,4,55)) # 元组转集合
print(s4,type(s4)) # {1, 2, 3, 4, 55} <class 'set'>

s5 = set('Python') # 字符串转集合
print(s5) # {'t', 'h', 'P', 'y', 'n', 'o'}

s6 = set({1,2,5,3,66}) # 集合转集合
print(s6) # {1, 66, 2, 3, 5}

# 空集合
s7 = {} # 默认为空字典
s8 = set() # 空集合
print(s7,type(s7),s8,type(s8)) # {} <class 'dict'> set() <class 'set'>

2、集合的相关操作

# (1)判断 in、not in
ss = {1,2,3,4,5}
print(1 in ss) # True
print(1 not in ss) # False

# (2)新增
# add() 添加一个
# update() 添加一个或多个
ss.add(222)
print(ss) # {1, 2, 3, 4, 5, 222}
ss.update({33,44,55})
print(ss) # {1, 2, 3, 4, 5, 33, 44, 55, 222}
ss.update((2222,4444))
print(ss)
ss.update([77,88])
print(ss) # {1, 2, 3, 4, 5, 33, 44, 77, 2222, 55, 88, 4444, 222}

# (3)删除
# remove() 一次删除一个指定元素,如果指定元素不存在就抛出KeyError
# discard() 一次删除一个指定元素,如果指定元素不存在不抛出异常
# pop() 一次只删除一个任意元素,不能添加参数
# clear() 清空集合
ss.remove(222)
print(ss) # {1, 2, 3, 4, 5, 33, 44, 77, 2222, 55, 88, 4444}
# ss.remove(1000)
# print(ss)  KeyError: 1000
ss.discard(1000)
print(ss) # {1, 2, 3, 4, 5, 33, 44, 77, 2222, 55, 88, 4444}
ss.pop()
print(ss) # {2, 3, 4, 5, 33, 44, 77, 2222, 55, 88, 4444}

3、集合间的关系

# (1)相等 使用==、!=判断
ss1 = {1,2,3}
ss2 = {1,2,4}
ss3 = {3,2,1}
print(ss1==ss2) # False
print(ss1!=ss2) # True
print(ss1==ss3) # True 集合的元素相同、位置不同,集合相等
# (2)子集 调用issubset
ss4 = {1,2,3,5,6}
print(ss1.issubset(ss4)) # True ss1是ss4的子集
print(ss2.issubset(ss4)) # False
# (3)超集 调用issuperset
print(ss4.issuperset(ss1)) # True ss4是ss1的超集
print(ss4.issuperset(ss2)) # False
# (4)交集 调用isdisjoint,是否没有交集
print(ss1.isdisjoint(ss2)) # False

4、集合的数学操作

# (1)交集 intersection()或&
s1 = {1,2,3,4}
s2 = {1,2,3,5}
print(s1.intersection(s2)) # {1, 2, 3}
print(s1 & s2) # {1, 2, 3}

# (2)并集 union()或|
print(s1.union(s2)) # {1, 2, 3, 4, 5}
print(s1|s2) # {1, 2, 3, 4, 5}

# (3)差集 difference或-
print(s1.difference(s2)) # {4}
print(s1-s2) # {4}
print(s2-s1) # {5}

# (4)对称差集symmetric_difference()或^
print(s1.symmetric_difference(s2)) # {4, 5}
print(s1^s2) # {4, 5}

5、集合生成式

# 与列表生成式类似
s = {i*i for i in range(10)}
print(s) # {0, 1, 64, 4, 36, 9, 16, 49, 81, 25}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值