返回 导航

Python / AI

hangge.com

Python - 基本数据类型详解3(集合、字典)

作者:hangge | 2022-05-07 08:50

七、集合(Set)

1,集合定义

(1)集合与列表很像,不同的是集合内部的元素是无序的并且不可重复。创建集合的时候有 2 种方式,一种是直接使用集合的特征符号‘{}’来创建,一种是使用 set() 函数强制类型转换来创建:
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
set1 = {"a", "b", "c"}
set2 = set()
set3 = set(["a", "b", "c"])
set4 = set(("a", "b", "c"))
set5 = set(range(0, 5))

print(set1)
print(set2)
print(set3)
print(set4)
print(set5)

(2)由于集合内的元素是无序并且不可重复的,因此我们可以使用集合来进行去重:
set = {"a", "b", "b", "b", 1 , 1, 2}
print(set)

2,判断是否包含某元素

使用 in not in 可以判断某元素是否存在:
set = {"a", "b", "c" , 1, 2}

if "a" in set:
    print("a is in set")

if "d" not in set:
    print("d is not in set")

3,遍历集合

集合不支持索引,因为集合内元素是无序的,我们可以使用 for 循环来遍历:
set = {"a", "b", "c" , 1, 2}
for i in set:
    print(i)

4,添加删除元素

集合提供了一些方法让我们可以对元素进行增删改操作:
set = {"a", "b", "c" , 1, 2}
print(set)

print("--- 插入元素 ---")
set.add("d")
set.add("a")
print(set)

print("--- 删除元素 ---")
set.remove("a")
print(set)

print("--- 连接两个集合 ---")
set.update(["X", "Y"])
print(set)

print("--- 清空内部元素 ---")
set.clear()
print(set)

5,集合运算

(2)我们可以使用一些运算符计算两个集合的交集、并集、差集、异或集等。在对集合做运算时,不会影响原来的集合,而是返回一个运算结果。
print("--- 创建两个集合 ---")
set1 = {1,2,3,4}
set2 = {3,4,5,6}
print(set1)
print(set2)

print("--- & 交集运算 ---")
print(set1 & set2) # {3, 4}

print("--- | 并集运算 ---")
print(set1 | set2) # {1, 2, 3, 4, 5, 6}

print("--- | 差集 ---")
print(set1 - set2) # {1, 2}

print("--- ^ 异或集(两个集合中特有的元素) ---")
print(set1 ^ set2) # {1, 2, 5, 6}


(2)也可以检查一个集合是否是另一个集合的超集或者子集:
子集、超集:如果 a 集合中的元素全部都在 b 集合中出现,那么 a 集合就是 b 集合的子集,b 集合是 a 集合超集
真子集、真超集:如果超集 b 中含有子集 a 中所有元素,并且 b 中还有 a 中没有的元素,则 b 就是 a 的真超集,ab 的真子集
print("--- 真子集判断 ---")
print({1, 2, 3} < {1, 2, 3}) # False
print({1, 2, 3} < {1, 2, 3, 4}) # True

print("--- 子集判断 ---")
print({1, 2, 3} <= {1, 2, 3}) # True
print({1, 2, 3} <= {1, 2, 3, 4}) # True

print("--- 真超集判断 ---")
print({1, 2, 3} > {1, 2, 3}) # False
print({1, 2, 3, 4} > {1, 2, 3}) # True

print("--- 超集判断 ---")
print({1, 2, 3} >= {1, 2, 3}) # True
print({1, 2, 3, 4} >= {1, 2, 3}) # True

八、字典(dict)

1,字典定义

(1)字典是一种映射类型,字典用 { } 标识,它是一个无序的“键(key):值(value)”的集合。
注意:字典中的值(value)可以是任意数据类型,但是键(key)必须是不可变的类型,例如整数、字符串、元组都可以作为字典的键(key)。
dict1 = {} #空字典
dict2 = {'name':'Tom','age':20, 2: True} #带有三个元素的字典

(2)也可以使用构造函数 dict() 直接从键值对序列中构建字典:
dict1 = dict([('hangge', 1), ('Google', 2), ('Taobao', 3)])
dict2 = dict(hangge=1, Google=2, Taobao=3)
print(dict1)
print(dict2)

2,判断是否包含某个键

使用 in not in 可以判断字典中某个键是否存在:
dict = {"hangge": 1, "google": 2, "taobao": 3}

if "hangge" in dict:
    print("hangge is in dict")

if "baidu" not in set:
    print("baidu is not in dict")

3,获取键值

下面是获取字典里面键值的一些方法:
dict = {"hangge": 1, "google": 2, "taobao": 3}
print(dict)
print("--- 通过键获取值 ---")
print(dict["hangge"])  # 没找到会报错
print(dict.get("baidu", "没找到"))  #没找到返回指定值
print("--- 获取所有键 ---")
print(dict.keys())
print("--- 获取所有值 ---")
print(dict.values())
print("--- 获取可迭代的(键, 值) 元组列表 ---")
print(dict.items())

4,遍历字典

(1)遍历字典中所有的键:
dict = {"hangge": 1, "google": 2, "taobao": 3}

for key in dict:
    print(key)

for key in dict.keys():
    print(key)

(2)遍历字典中所有的值:
dict = {"hangge": 1, "google": 2, "taobao": 3}

for value in dict.values():
    print(value)

(3)遍历字典中的所有键和值:
dict = {"hangge": 1, "google": 2, "taobao": 3}

for key, value in dict.items():
    print(key, value)

5,添加修改删除元素

下面是一些对字典元素进行增删改操作的样例:
dict = {"hangge": 1, "google": 2, "taobao": 3}
print(dict)
print("--- 根据key设置值(没有则新增,有则更新) ---")
dict["hangge"] = 0
dict["baidu"] = 4
print(dict)
print("--- 根据key设置值(没有则新增,有则不更新) ---")
dict.setdefault("google", 5)
dict.setdefault("qq", 5)
print(dict)
print("--- 批量更新字典中的键值 ---")
dict.update({"hangge": 100, "163": 10})
print(dict)
print("--- 根据key删除指定元素 ---")
del dict["hangge"] #当删除不存在的key时,会报异常 KeyError
dict.pop("baidu") #当删除不存在的key时,会返回None,否则会返回被删除的值
print(dict)
print("--- 删除最后一个元素 ---")
dict.popitem() #删除最后一个元素,并将该键值对以元组的形式返回
print(dict)
print("--- 清空字典 ---")
dict.clear()
print(dict)

6,获取字典大小

通过 len() 方法可以获取字典的元素个数,即键的个数:
dict = {"hangge": 1, "google": 2, "taobao": 3}
print(len(dict))
评论

全部评论(0)

回到顶部