pythondictionary
#
创建字典
#
# 空字典
dict1 = {}
dict2 = dict()
# 直接赋值
person = {'name': 'Alice', 'age': 25, 'city': 'Beijing'}
# 使用dict()构造函数
person = dict(name='Alice', age=25, city='Beijing')
# 从键值对序列
items = [('name', 'Alice'), ('age', 25)]
person = dict(items)
基本操作
#
# 访问值
name = person['name'] # 'Alice'
age = person.get('age') # 25
# 修改值
person['age'] = 26
# 添加新键值对
person['gender'] = 'female'
# 删除键值对
del person['city']
removed_value = person.pop('age')
常用方法
#
person = {'name': 'Alice', 'age': 25, 'city': 'Beijing'}
# 获取所有键
keys = person.keys() # dict_keys(['name', 'age', 'city'])
# 获取所有值
values = person.values() # dict_values(['Alice', 25, 'Beijing'])
# 获取所有键值对
items = person.items() # dict_items([('name', 'Alice'), ('age', 25), ('city', 'Beijing')])
# 检查键是否存在
if 'name' in person:
print("键存在")
# 获取字典长度
length = len(person) # 3
更新和合并
#
# 更新字典
person.update({'age': 26, 'job': 'Engineer'})
# 合并字典 (Python 3.9+)
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged = dict1 | dict2 # {'a': 1, 'b': 3, 'c': 4}
字典推导式
#
# 基本推导式
squares = {x: x**2 for x in range(1, 6)} # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 带条件的推导式
even_squares = {x: x**2 for x in range(1, 6) if x % 2 == 0} # {2: 4, 4: 16}
# 键值互换
original = {'a': 1, 'b': 2, 'c': 3}
swapped = {v: k for k, v in original.items()} # {1: 'a', 2: 'b', 3: 'c'}
defaultdict
#
from collections import defaultdict
# 设置默认值类型
word_count = defaultdict(int)
words = ['apple', 'banana', 'apple', 'orange']
for word in words:
word_count[word] += 1
# 默认值为列表
grouped_data = defaultdict(list)
data = [('a', 1), ('b', 2), ('a', 3)]
for key, value in data:
grouped_data[key].append(value)
OrderedDict (保持插入顺序)
#
from collections import OrderedDict
ordered_dict = OrderedDict()
ordered_dict['z'] = 1
ordered_dict['a'] = 2
ordered_dict['m'] = 3
# 保持插入顺序: z -> a -> m
Counter (计数专用)
#
from collections import Counter
words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
word_count = Counter(words)
# Counter({'apple': 3, 'banana': 2, 'orange': 1})
# 最常见元素
most_common = word_count.most_common(2) # [('apple', 3), ('banana', 2)]
字典遍历技巧
#
person = {'name': 'Alice', 'age': 25, 'city': 'Beijing'}
# 遍历键
for key in person:
print(key)
# 遍历值
for value in person.values():
print(value)
# 遍历键值对
for key, value in person.items():
print(f"{key}: {value}")
# 同时获取索引和键值对
for idx, (key, value) in enumerate(person.items()):
print(f"索引{idx}: {key} = {value}")
字典解包
#
def print_person_info(name, age, city):
print(f"{name} is {age} years old, living in {city}")
person = {'name': 'Alice', 'age': 25, 'city': 'Beijing'}
print_person_info(**person) # 解包字典作为参数
设置默认值
#
# 使用setdefault
person = {'name': 'Alice'}
age = person.setdefault('age', 25) # 如果age不存在,设置为25
# 使用get设置默认值
city = person.get('city', 'Unknown')
字典排序
#
scores = {'Alice': 85, 'Bob': 92, 'Charlie': 78}
# 按键排序
sorted_by_key = dict(sorted(scores.items()))
# 按值排序
sorted_by_value = dict(sorted(scores.items(), key=lambda x: x[1]))
# 按值降序排序
sorted_desc = dict(sorted(scores.items(), key=lambda x: x[1], reverse=True))