知妳网 知妳网-知妳所想,懂妳所需

知妳网

知妳网知你所想为你解忧最懂你的网站

python 字典和*

Python中的字典(dict)和*(set)是两种高效的数据结构,适用于不同的场景。以下是它们的核心概念和用法

python 字典和*

字典(Dictionary)

  • 定义:键值对*,用 `{}` 表示,键必须为不可变类型(如字符串、数字、元组),值可以是任意类型。
  • python

    person = {'name': 'Alice', 'age': 30}

  • 操作
  • 访问值:`person['name']`(键不存在会报错)或 `person.get('address', '默认值')`(安全方式)。
  • 设置默认值:`person.setdefault('gender', 'female')`。
  • 更新字典:`person.update({'age': 31})` 或 Python 3.9+ 的 `|` 运算符。
  • 遍历
  • python

    for key in person: ... 遍历键

    for key, value in person.items: ... 遍历键值对

  • 视图对象
  • `keys`、`values`、`items` 返回动态视图,实时反映字典变化。
  • 字典推导式
  • python

    squares = {x: x2 for x in range(5)} {0:0, 1:1, 2:4, ...}

    *(Set)

  • 定义:无序且元素唯一的*,用 `{}` 或 `set` 创建,元素必须为不可变类型。
  • python

    unique_numbers = {1, 2, 3}

  • 操作
  • 添加/删除:`add(elem)`、`remove(elem)`(元素不存在报错)、`discard(elem)`(不报错)、`pop`(随机删除)。
  • *运算
  • 并集:`a | b` 或 `a.union(b)`
  • 交集:`a & b` 或 `a.intersection(b)`
  • 差集:`a
  • b` 或 `a.difference(b)`
  • 对称差集:`a ^ b` 或 `a.symmetric_difference(b)`
  • 不可变*:`frozenset` 可用作字典的键或*的元素。
  • python

    fs = frozenset([1, 2, 3])

  • *推导式
  • python

    letters = {c for c in 'abracadabra' if c not in 'abc'} {'d', 'r'}

    关键区别

    | 特性 | 字典(dict) | *(set) |

    |-|||

    | 元素结构 | 键值对(key: value) | 单个元素 |

    | 有序性 | Python 3.7+ 有序 | 始终无序 |

    | 主要用途 | 快速通过键查找值 | 去重、成员检测 |

    | 哈希要求 | 键必须可哈希 | 元素必须可哈希 |

    应用场景

    1. 字典

  • 存储对象属性(如用户信息)。
  • 统计词频:`{word: text.count(word) for word in words}`。
  • 2. *

  • 去重:`unique_words = set(words)`。
  • 检查成员:`if item in unique_words: ...`。
  • 注意事项

    1. 避免遍历时修改:遍历字典时如需删除元素,先*键列表:

    python

    for key in list(dict.keys):

    if condition: del dict[key]

    2. 哈希冲突:自定义对象作为键时,需正确实现 `__hash__` 和 `__eq__`。

    3. 版本兼容性:Python 3.7+ 中字典有序,旧版本需用 `collections.OrderedDict`。

    掌握字典和*的使用,能显著提升代码效率和简洁性!