Skip to content

字典与集合:键约束、哈希与视图 ​

字典基础 ​

字典存储键值对,键必须可哈希。

python
person = {'name': 'Alice', 'age': 30, 'city': 'NYC'}
print(person['name'])  # 'Alice'

person['email'] = 'alice@example.com'  # 添加
person['age'] = 31  # 修改
del person['city']  # 删除

# 安全访问
print(person.get('phone', 'N/A'))  # 'N/A'(不存在)

字典方法 ​

python
d = {'a': 1, 'b': 2}

d.keys()    # dict_keys(['a', 'b'])
d.values()  # dict_values([1, 2])
d.items()   # dict_items([('a', 1), ('b', 2)])

d.update({'c': 3, 'a': 10})  # 合并
popped = d.pop('b')  # 弹出键
d.setdefault('d', 0)  # 存在则返回,不存在则设置

字典推导式 ​

python
squares = {x: x**2 for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

filtered = {k: v for k, v in squares.items() if v > 5}
# {3: 9, 4: 16}

集合 ​

集合是无序、无重复的可哈希对象集合。

python
fruits = {'apple', 'banana', 'cherry'}
fruits.add('date')
fruits.remove('banana')

# 集合运算
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

print(a | b)  # {1, 2, 3, 4, 5, 6}(并集)
print(a & b)  # {3, 4}(交集)
print(a - b)  # {1, 2}(差集)
print(a ^ b)  # {1, 2, 5, 6}(对称差)

可哈希类型 ​

可作为字典键或集合元素的类型:

  • 可哈希:int, float, str, tuple(元素也可哈希), frozenset
  • 不可哈希:list, dict, set
python
# 正确
d = {(1, 2): 'point'}

# 错误
# d = {[1, 2]: 'point'}  # TypeError

练习 ​

  1. 词频统计:统计字符串中每个单词出现次数。
  2. 字典合并:合并两个字典,后者覆盖前者。
  3. 集合去重:用集合去除列表重复元素。
  4. 两个列表的交集:找出两个列表的公共元素。
  5. 字典反转:交换字典的键和值。

答案:第三章答案

下一节:字符串与Unicode

用心记录每一步成长