Python——集合与字典

集合

集合(set)是一个无序的不重复元素序列。

1.集合的创建

1). 使用大括号 { } 或者 set() 函数创建集合;

2). 注意:创建一个空集合必须用 set() 而不是 { } , { } 是用来创建一个空字典的。

实例:s1 = {1,2,3,'hello',(1,2,3),[1,2,3]}  可以定义成功吗?

这个是不能定义成功的,因为集合里面不能存储可变的数据类型 列表,所以定义不成功。

2.集合的增加和删除

1)集合的增加(.add   .update)

  .add :添加一个元素到集合里面

  .update:添加多个元素到集合中

2)集合的删除(.remove   .discard   .pop   .clear)

.remove:删除指定的元素, 如果元素不存在, 则报错

.discard:删除指定的元素, 如果元素不存在, 则什么也不做

.pop:随机删除集合中的元素

.clear:将集合元素清空

有一点需要值得注意的是,如果要对集合排序, 需要先转成列表(因为集合是无序的),操作如下:

# 如果要对集合排序, 需要先转成列表;
nums = {2, 3, 1, 2, 3, 5, 7, 8, 3, 22, 2}
nums = list(nums)
# 默认从小到大进行排序, reverse=True由大到小进行排序;
nums.sort(reverse=True)
print(nums)

输出结果:

3.集合的数学操作

1)交集

set1.intersection(set2):求集合1与集合2的交集

set1 & set2:求集合1与集合2的交集的另一种方法

set2.intersection_update(set1):求集合1和集合2的交集, 并更新集合1为交集的内容

2)并集

set1.union(set2):求集合1与集合2的并集

set1 | set2:求集合1与集合2的并集的另一种方法

3)差集(集合本身 - 交集)

set1.difference(set2):集合1除去和集合2相同的部分,就是集合1与集合2的差集

set1 - set2:与上含义相同,是求差集的另一种方法

4)对等差分(并集 - 交集)

set1.symmetric_difference(set2):集合1与集合2的并集再减去它两个的交集部分,就是对等差分

set1 ^ set2:与上含义相同,是求对等差分的另一种方法

5)判断

set1.issubset(set2):集合1是否包含于集合2

set1.issuperset(set2):集合1是否包含集合2

set1.isdisjoint(set2):判断两个集合是否包含相同的元素,如果不包含则返回True,否则就返回False。

4.集合的特性

因为集合是无序的,所以不支持列表和元组拥有的特性,但是成员操操作符(in,not in)是可以用的。


字典

字典是另一种可变容器模型,且可存储任意类型对象。

键(key)一般是唯一的,如果重复最后的一个键值对会替换前面的,值(value)不需要唯一。

字典是由键值对组成(key-value)   其形式为:d = {key1 : value1, key2 : value2 }(冒号前面的值叫做键key, 冒号后面的值叫做值value)

1.字典的创建

1)简单字典创建

注意:字典是不支持索引和切片的

2)内建方法:fromkeys

根据序列依次创建多个key-value对, key值是序列的每个元素,value相同(如果没有指定, 全为None;如果指定了, 为指定的内容)

例如:

3)zip间接创建

例如:

4)dict工厂函数创建

例如:

users = dict(name="粉条", age=10, gender='male')
print(users)
输出为:{'name': '粉条', 'age': 10, 'gender': 'male'}

2.字典的增加、删除和查看

1)字典的键值对增加(.services   .setdefault   .update)

 直接根据key值增加,如果key不存在, 增加键值对; 如果key已经存在, 更新key对应的value值

.setdefault:如果key不存在, 增加键值对; 如果key已经存在,不做任何操作

.update:(和第一种方法类似但有区别: 可以一次更新多个键值对) 如果key不存在, 增加键值对; 如果key已经存在, 更新key对应的value值

2)字典的键值对删除(del   .pop   .popitem   .clear)

del:删除对应的键值对

.pop:删除对应的键值对, 并返回对应的value值, 可以保存并使用

.popitem:随机删除字典的key-value值

.clear:将字典中的所有键值对清空

3)字典的查看(.keys   .values   .items)

.keys:查看所有的key值

.values:查看所有的value值

.items:查看所有的键值对,并以列表嵌套元组的形式输出。

3.通过字典实现switch语句

方法一:根据key值获取value值:dic [key]

如果key值存在, 返回value值;

如果key值不存在, 报错。

例如:

gradeDic = {'A': "优秀", 'B': "良好", 'C': "及格"}
grade = input("请输入等级:")
if grade in gradeDic:
     print(gradeDic[grade])
else:
     print("无效的成绩")

结果为:

方法二:根据key值获取value值: dic.get(key)

如果key值存在, 返回value值;

如果key值不存在,返回None或者你指定的默认值

例如:

gradeDic = {'A': "优秀", 'B': "良好", 'C': "及格"}
grade = input("请输入等级:")
print(gradeDic.get(grade, "无效的成绩"))

结果为与方法一相同:

4.遍历字典的方法

1)遍历字典, 默认遍历的是字典的key值

d = dict(name='fentiao', age=10)

# 默认遍历字典只遍历key值;
for item in d:
    print(item)


输出结果为:
name
age

2)遍历字典的所有value值

d = dict(name='fentiao', age=10)
for value in d.values():
    print(value)


输出结果为:
fentiao
10

3)获取字典的key-value对

d = dict(name='fentiao', age=10)
for key,value in d.items():
    print(key, '->', value)

输出结果为:
name -> fentiao
age -> 10

5.一键多值字典:defaultdict

collections.defaultdict类,本身提供了默认值的功能, 默认值可以是整型,列表,集合等。

1). 字典是一种关联容器,每个键都映射到一个单独的值上。如果想让键映射到多个值,需要将这些多个值保存到容器(列表或者集合)中。     

2). 利用collections模块中的defaultdict类自动初始化第一个值,这样只需关注添加元素。

例如:

from collections import  defaultdict
# 创建一个空字典, 所有的value值默认是空列表[]
dict1 = defaultdict(list)
# 判断‘a’这个key值是否存在, 如果不存在, 返回[], .append, 在空列表后面追加元素1;
dict1['a'].append(1)
# 判断‘a’这个key值是否存在, 如果存在, 获取value值, .append, 在原有的value值后面追加元素1;
dict1['a'].append(2)

dict1['b'].append(4)
print(dict1)


# 创建一个空字典, 所有的value值默认是空集合set()
dict1 = defaultdict(set)
# 判断‘a’这个key值是否存在, 如果不存在, 返回set(), .add, 在空列表后面追加元素1;
dict1['a'].add(1)
# 判断‘a’这个key值是否存在, 如果存在, 获取value值, .add, 在原有的value值后面追加元素1;
dict1['a'].add(2)

dict1['b'].add(4)
print(dict1)

输出结果为:


内置数据结构总结

1)

  • 可变数据类型:可以增删改。可变数据类型,允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。
  • 不可变数据类型:不可以增删改。python中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象。

2)

  • 序列: Python包含列表、元组、字符串、集合, 字典等内建的序列。所有序列类型都可以进行某些特定的操作。可以for循环
  • 有序序列:  这些操作包括:索引(indexing)、切片(sliceing)、连接操作符(adding)、重复操作符(multiplying)以及成员操作符。
  • 非序列:int, long, float, bool, complex

3)

  • 可以for循环: 字符串, 列表, 元组, 集合, 字典
  • 不可以for循环:数值类型(int, long, float, bool, complex)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值