python中字典和集合

字典:

字典是python唯一一个映射类型;字符串、列表、元组是序列类型;

彼此建立一个一对一或一对多的关系叫映射;

数组是通过序列的方式存储的,通过索引的方式取得里面的元素;0开始

    >>> brand = ['李宁','耐克','haha']
    >>> slogn = ['一切有可能','just do it','haha']
    >>> print('李宁的口号是:',slogn[0])

字典是:dict = {“keys”:”values”,”keys”:”values”}

键值对的形式出现,字典不能使用连接符号和相乘符号;

创建字典:

1.直接放在{}内,键值对的形式,字典是:dict = {“keys”:”values”,”keys”:”values”}

2.dict()函数

字典中的内置方法:

1.dict.keys()   获取字典中所有的keys值

2.dict.values()  获取字典中所有values值

3.dict.items()  获取字典中所有keys:values,,如:dict_items([('sex', 'boy'), ('name', 'liyue'), ('age', '18')])

4.dict.get()    获取字典中某一个keys的values值,如果值不在字典中返回默认值。

    语法:Dict.get(keys,default)

   >>> dict.get("aa","meiyou")
        'meiyou'

5.dict.clear()清空字典

  Eg:>>> dict
          {'sex': 'boy', 'name': 'liyue', 'age': '18'}
      >>> dict.clear()
      >>> dict
          {}

6.dict.fromkeys(seq,values)

  Python中fromkeys()用于创建一个新的字典,以seq序列中的元素作为keys,values作为每一个keys的values

Eg:>>> dict.fromkeys("1,2,3","number")
       {'2': 'number', '1': 'number', ',': 'number', '3': 'number'}

7.update()合并两个字典,相当于序列中的连接符号+,把字典dict2的键/值对更新到dict里。

  >>> dict ={"name":"liyue"}
  >>> dict1={"sex":"girl"}
  >>> dict1.update(dict)
  >>> dict1
      {'name': 'liyue', 'sex': 'girl'}

8.copy() 函数返回一个字典的浅复制

  >>> dict
      {'name': 'liyue', 'sex': 'girl'}
  >>> dict2 =dict.copy()
  >>> dict2
      {'name': 'liyue', 'sex': 'girl'}

9.in  python字典in操作符号用于判断键值是否存在字典中,存在返回true 否则返回false

       >>>'name' in dict
       >>>true

集合:

在python中用花括号包起一对数据,没有体现映射关系就是集合。

>>> dic
{24, 1, 2, 3, 4}
>>> type(dic)
    <class 'set'>

集合中所有的元素都是唯一的,集合具有唯一性,集合会帮我们把重复的数字剔除;

集合是无序的,你不能通过索引来获取其中的元素;

如何创建集合:

1.直接用花括号把一对元素括起来;dict={1,3,5,33,2}

2.使用工厂函数set();

set1 =set(序列) 序列:列表、元组、字符串
 eg:
>>> set1=set((1,2,3,4,2,1,2,4,5))
>>> set1
{1, 2, 3, 4, 5}

例子:

剔除list中重复的元素。list=[1,2,3,4,3,2]

1.不利用集合:

list=[1,2,3,4,3,2]
temp[]  #创建一个空数组
for i in list:
   if i not in temp:
        temp.append(i)

2.利用集合如下:

list = list(set(list))

如何访问集合中的值?

1.用for 循环遍历每一个元素;

2用in 或 not in 

>>> num
{1, 2, 3, 4}
>>> 1 in num
True
>>> 1 not in num
False
集合中的内置方法:

1.add()增加元素,列表是append()

>>> num
{1, 2, 3, 4}
>>> num.add(5)
>>> num
{1, 2, 3, 4, 5}

2.remove()移除某个元素,列表是del list[-1]

>>> num
{1, 2, 3, 4,5}
>>> num.remove(5)
>>> num
{1, 2, 3, 4}

3.不可变集合 frozenset()

>>> num3 = frozenset([1,2,3,4,3,2])
>>> num3
frozenset({1, 2, 3, 4})
>>> num3.add(0)将会报错















<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()` | > 关键差异:**字典维护键值映射关系,集合专注元素唯一性与数学运算**。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值