python中的字典和集合

本文详细介绍了Python中集合和字典的基本概念、特性和常用操作。集合是一种无序且不包含重复元素的数据结构,支持添加、删除等操作。字典采用键值对存储方式,支持快速查找和更新。此外,还提供了相关的实践练习题。

python中的字典和集合

一、集合

在这里插入图片描述

1.定义
集合(set)是一个无序的不重复元素序列。1,2,3,4,1,2,3 = 1,2,3,4
集合的创建:
1). 使用大括号 { } 或者 set() 函数创建集合;
2). 注意:
创建一个空集合必须用 set() 而不是 { }
{ } 是用来创建一个空字典。
在这里插入图片描述

2.特性
集合只支持 成员操作符 for循环,不支持重复和连接,也不支持索引和切片
在这里插入图片描述
3.集合的常用操作
增加
add() 添加单个元素
update() 添加多个元素

s = {6, 7, 8, 1, 2, 3}
s.add(10)   #默认已经排序
s.add(8)
print s
# 增加多个元素
s.update({4,5})
print s

在这里插入图片描述
删除
remove() 移除集合内的指定元素
pop() 随机移除集合内的某个元素
clear() 移除集合中的所有元素
在这里插入图片描述
交集和并集
& 交集 | 并集
在这里插入图片描述

二、字典

在这里插入图片描述

    1 字典的定义
    dictionary(字典)是除列表以外 python 中最灵活的数据类型
    字典同样可以用来存储多个数据,通常用于存储描述一个物体的相关信息
    2 字典和列表的区别
    列表是有序的对象集和
    字典是无序的对象集和
    3 字典用 {} 定义
    字典使用键值对存储数据,键值对之间使用 : 分隔
    键key是索引
    值value是数据
    键和值之间使用;分隔
    键必须是唯一的(因为我们必须通过键来找到数据)
    值可以取任何数据类型,但键只能使用字符串,数字或元组
    4 字典是一个无序的数据集和,使用print函数输出字典时,通常输出的顺序和定义的顺序是不一致的
  1. 定义字典
    在这里插入图片描述
    2.特性
    不支持重复和连接,也不支持索引和切片,支持成员操作符和for循环
    成员操作符判断是key值
    成员操作符举例
    在这里插入图片描述
    for循环举例
    在这里插入图片描述
    3.字典的常用操作
    增加
    d[key]=‘value’ 直接对字典里的指定Key更新, 如果key不存在则会添加该键值对
    update() 对字典中的多个键值对进行操作
    update:如果key值存在,更新value值,如果key值不存在,添加key-value
    在这里插入图片描述
    查看
    keys()查看字典中所有的key值
    values()查看字典中所有的value值
    items()查看字典中所有的键值对
    d[‘key’]查看字典中指定Key值对应的value值
    在这里插入图片描述
    删除
    pop(key) 对指定的key值删除,会返回删除的key值
    clear() 将字典清空
    在这里插入图片描述

三、测试题

课后测试1
需求:
明明想在学校中请一些同学一起做一项问卷调查,为了试验的客观性,他先用计算机随机生成了N个1到1000之间的随机整数,对于其中重复的数字只保留一个,把其余相同的去掉不同数字对应着不同的学生学号,然后再把这些书从大到小排序,按照排好的顺序去找同学调查。
在这里插入图片描述
2.写一个函数wordcount统计一篇文章的每个单词出现的次数(词频统计)。统计完成后,对该统计按单词频次进行排序。
在这里插入图片描述

<think> 我们被要求回答:Python字典集合的区别。根据引用内容,我们可以总结如下: 1. **数据存储形式**: - 字典(dict):存储键值对(key-value pairs),键是唯一的,且不可变类型(如字符串、数字、元组等),值可以是任意类型。 - 集合(set):存储唯一元素(不重复),元素必须是不可变类型(因为集合是基于哈希表实现的)。 2. **创建方式**: - 字典: ```python d1 = {'name': 'jason', 'age': 20} d2 = dict(name='jason', age=20) d3 = dict([('name','jason'), ('age',20)]) ``` - 集合: ```python s1 = {1, 2, 3} s2 = set([1, 2, 3]) ``` 3. **可变性**: - 字典:可变,可以动态添加、删除、修改键值对。 - 集合:普通集合(set)可变,可以动态添加或删除元素;还有一种不可变集合(frozenset),创建后不能修改,且可以作为字典的键。 4. **主要用途**: - 字典:用于存储映射关系,通过键快速查找对应的值(时间复杂度$O(1)$),适合存储具有关联关系的数据。 - 集合:用于存储不重复的元素,支持集合运算(并集、交集、差集等),适合去重集合操作。 5. **操作示例**: - 字典操作: ```python person = {"name":"Alice", "age":25} person["email"] = "alice@example.com" # 添加 person["age"] = 26 # 修改 del person["age"] # 删除 for key, value in person.items(): # 遍历 print(key, value) ``` - 集合操作: ```python s = {1,2,3} s.add(4) # 添加 s.remove(1) # 删除 s2 = {3,4,5} print(s | s2) # 并集 {1,2,3,4,5} print(s & s2) # 交集 {3} print(s - s2) # 差集 {1,2} ``` 6. **注意事项**: - 字典的键集合的元素都必须是可哈希的(即不可变类型),因为它们的内部实现都是基于哈希表。 - 集合没有键值对的概念,只有元素。 总结: | 特性 | 字典(dict) | 集合(set) | |--------------|----------------------------------------|---------------------------------------| | 存储内容 | 键值对 | 唯一元素 | | 元素要求 | 键:不可变类型;值:任意 | 元素:不可变类型 | | 可变性 | 可变 | 普通集合可变,frozenset不可变 | | 主要操作 | 增删改查键值对,按键快速查找值 | 添加/删除元素,集合运算(并、交、差)| | 创建方式 | `{}`或`dict()` | `{}`(空集合必须用`set()`)或`set()` | | 重复处理 | 键唯一,后出现的覆盖先出现的 | 自动去重 | | 应用场景 | 映射关系数据(如JSON)、配置等 | 去重、成员检测、集合运算 | 注意:空集合必须用`set()`创建,因为`{}`表示空字典。 参考文献: [^1]: 引用1中说明了字典集合的创建方式以及混合类型的使用。 [^2]: 引用2指出两者都基于哈希表实现,但存储形式不同。 [^3]: 引用3提供了操作示例总结。 [^4]: 引用4提到元组列表的区别,但这里我们主要参考了关于字典集合的部分。 </think> ### Python 字典集合的区别 #### 1. **数据存储形式** - **字典**:存储 **键值对映射** 每个元素由唯一键(`key`)对应的值(`value`)组成 ```python person = {"name": "Alice", "age": 25} # 键值对结构 ``` - **集合**:存储 **唯一元素** 不包含重复值的无序容器 ```python numbers = {1, 2, 3} # 单值元素 ``` #### 2. **内部实现** 两者均基于**哈希表**实现,但结构不同: - **字典**:哈希表存储 `<hash(key), key, value>` - **集合**:哈希表存储 `<hash(element), element>` 本质上相当于**只有键的字典**(`set` ≈ `dict` with `None` values)[^1][^2] #### 3. **元素要求** - **键/元素必须不可变**(字符串、数字、元组等) ```python valid_dict = {("key",): "value"} # 元组作键 valid_set = {1, "hello", (1,2)} # 混合类型 ``` - **禁止可变类型**(列表、字典等) ```python {[1,2]: "value"} # TypeError: unhashable type {{1,2}} # 同样报错 ``` #### 4. **核心操作对比** | 操作 | 字典(dict) | 集合(set) | |--------------|-----------------------------------|------------------------------------| | **添加元素** | `dict["new_key"] = value` | `set.add(element)` | | **删除元素** | `del dict["key"]` 或 `dict.pop()` | `set.remove(element)` | | **成员检测** | `"key" in dict` ($O(1)$) | `element in set` ($O(1)$) | | **空容器** | `{}` 或 `dict()` | `set()` (`{}` 表示空字典) | #### 5. **特有功能** - **字典特有** - 键值关联查询:`person["name"] → "Alice"` - 获取所有键值:`.keys()`、`.values()`、`.items()` - 安全访问:`dict.get("key", default)` - **集合特有** - 集合运算: ```python A = {1,2,3}; B = {3,4,5} A | B # 并集 → {1,2,3,4,5} A & B # 交集 → {3} A - B # 差集 → {1,2} ``` - 去重功能:`set([1,1,2,2]) → {1,2}` #### 6. **应用场景** - **字典**:JSON数据处理、配置管理、缓存系统等**键值映射场景** - **集合**:数据去重、关系检测(如共同好友)、**集合运算场景** [^3] ```python # 典型应用对比 # 字典:用户信息存储 user = {"id": 101, "name": "Alice", "premium": True} # 集合:网站访客去重 unique_visitors = set() unique_visitors.add("192.168.1.1") unique_visitors.add("192.168.1.1") # 自动去重 ``` #### 总结 | 特性 | 字典(dict) | 集合(set) | |--------------|---------------------------------|------------------------| | **存储单元** | 键值对(key-value) | 单值元素(element) | | **查询目标** | 按键找值 | 元素存在性检测 | | **核心能力** | 映射关系管理 | 去重与集合运算 | | **空容器** | `{}` 或 `dict()` | `set()` | > 关键差异:**字典维护键值映射关系,集合专注元素唯一性与数学运算**。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值