Python数据容器(dict字典、set集合)

dic字典

dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

字典的创建使用大括号 {} 包含键值对,并用冒号 : 分隔键和值,形成 键:值 对。

字典的特性

  • 唯一键:字典中的每个键都必须是唯一的。值可以取任何数据类型,如字符串,数字,元组。
  • 无序(Python 3.6 之前的版本):在 Python 3.6 之前的版本中,字典是无序的。但从 Python 3.7 开始,字典保持插入顺序。
  • 可变:字典是可变的,可以添加、删除或修改键值对。
  • 内置方法:字典提供了许多内置方法,如 get()update()clear() 等,用于执行各种操作。

Python数据容器(dict字典、set集合)_第1张图片

字典的基本操作

创建字典

可以使用花括号 {} 创建一个字典,并用冒号 : 分隔键和值,用逗号 , 分隔键值对。

my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}

访问字典中的值

使用键来访问字典中的值。

print(my_dict['name'])  # 输出: John

为什么dict查找速度这么快?

因为dict的实现原理和查字典是一样的。

假设字典包含了1万个汉字,需要在其中查询某一个字

第一种方式是把字典从第一页往后翻,直到找到所需的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。

第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字。无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢,dict字典就是该种方式。

添加或修改键值对

如果键已存在,则更新其值;如果键不存在,则添加新的键值对。

my_dict['age'] = 31  # 修改  
my_dict['job'] = 'Engineer'  # 添加

删除键值对

使用 del 语句或 pop() 方法删除键值对。

del my_dict['city']  # 删除键值对  
job = my_dict.pop('job', 'Not found')  # 删除并返回'job'的值,如果'job'不存在则返回'Not found'

检查键是否存在

使用 in 关键字检查键是否存在于字典中。

if 'name' in my_dict:  
    print("Key exists")

一些字典中的方法

dict_a = {1: 2, 2: 3, True: False, "a": "b", (1, 2): [3, 4]}
print(dict_a.keys())   # 返回所有的key
# 输出:dict_keys([1, 2, 'a', (1, 2)])

print(dict_a.values()) # 返回所有的value
# 输出:dict_values([False, 3, 'b', [3, 4]])

# item 将键值对以二元组的形式返回出来
print(dict_a.items())
# 输出:dict_items([(1, False), (2, 3), ('a', 'b'), ((1, 2), [3, 4])])

# get:通过key获取value,还可以指定当key不存在时返回一个默认值
print(dict_a.get("a", "没有这个键"))   # 输出:b
print(dict_a.get("c", "没有这个键"))   # 输出:没有这个键

# popitem 弹出一个键值对,弹出后字典中就没有了
print(dict_a.popitem())   # 输出:((1, 2), [3, 4])
print(dict_a)             # 输出:{1: False, 2: 3, 'a': 'b'}

# clear:清空字典
print(dict_a.clear())   # 输出:None

set集合

在Python中,set 是一个无序的、不包含重复元素的数据集合。它主要用于进行数学上的集合操作,如并集、交集、差集和对称差集等。set 集合可以用来快速地进行成员关系测试和删除重复元素。

创建集合

你可以使用大括号 {} 或者 set() 函数来创建集合。但是,请注意,当你使用大括号 {} 时,如果里面没有任何元素,Python 会将其解释为一个空字典,而不是空集合。因此,为了创建一个空集合,你应该使用 set()

# 使用大括号创建集合  
my_set = {1, 2, 3, 4}  
  
# 使用 set() 函数创建集合  
another_set = set([1, 2, 3, 4])  
  
# 创建一个空集合  
empty_set = set()

集合操作

集合支持多种操作,包括但不限于:

  • 并集 (| 或 union()):返回两个集合的并集,即包含所有不重复的元素。
  • 交集 (& 或 intersection()):返回两个集合的交集,即两个集合中都有的元素。
  • 差集 (- 或 difference()):返回集合的差集,即存在于第一个集合中但不在第二个集合中的所有元素。
  • 对称差集 (^ 或 symmetric_difference()):返回两个集合的对称差集,即存在于一个集合中但不同时存在于两个集合中的所有元素。
# 并集  
set1 = {1, 2, 3}  
set2 = {3, 4, 5}  
union_set = set1 | set2  # 或 set1.union(set2)  
print(union_set)  # 输出: {1, 2, 3, 4, 5}  
  
# 交集  
intersection_set = set1 & set2  # 或 set1.intersection(set2)  
print(intersection_set)  # 输出: {3}  
  
# 差集  
difference_set = set1 - set2  # 或 set1.difference(set2)  
print(difference_set)  # 输出: {1, 2}  
  
# 对称差集  
symmetric_difference_set = set1 ^ set2  # 或 set1.symmetric_difference(set2)  
print(symmetric_difference_set)  # 输出: {1, 2, 4, 5}

集合的方法

set 类型提供了许多内置方法来执行常见的集合操作,比如添加元素 (add())、删除元素 (remove() 或 discard())、检查元素是否存在 (in 关键字)、更新集合 (update())、清空集合 (clear())、计算集合的长度 (len() 函数) 等。

my_set = {1, 2, 3}  
  
# 添加元素  
my_set.add(4)  
print(my_set)  # 输出: {1, 2, 3, 4}  
  
# 删除元素  
my_set.remove(2)  # 如果元素不存在,会抛出 KeyError  
# 或者使用 discard(),如果元素不存在,不会抛出异常  
my_set.discard(5)  
print(my_set)  # 输出: {1, 3, 4}  
  
# 检查元素是否存在  
if 3 in my_set:  
    print("3 is in the set")  
  
# 更新集合  
my_set.update([3, 4, 5, 6])  # 注意:这不会添加重复元素  
print(my_set)  # 输出: {1, 3, 4, 6}  
  
# 清空集合  
my_set.clear()  
print(my_set)  # 输出: set()  
  
# 计算集合的长度  
print(len(my_set))  # 输出: 0


# 补充
# pop:随机移除一个元素,因为set集合是无序的
set_d = {4, 5, 6, 7, 8, 9}
print(set_d.pop())   
print(set_d)

你可能感兴趣的:(python,开发语言)