Python 字典的用法和技巧

字典的创建与初始化

Python 字典是一种可变容器模型,可存储任意类型对象。字典的每个键值对用冒号分隔,键值对之间用逗号分隔,整个字典包括在花括号中。

# 创建一个空字典
empty_dict = {}

# 创建一个包含键值对的字典
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}

字典的访问与修改

通过键可以访问字典中的值,如果键不存在,会抛出 KeyError 异常。可以使用 get 方法来避免异常,并返回默认值。

# 访问字典中的值
print(my_dict['name'])  # 输出: Alice

# 修改字典中的值
my_dict['age'] = 26
print(my_dict)  # 输出: {'name': 'Alice', 'age': 26, 'city': 'New York'}

# 使用 get 方法访问不存在的键
print(my_dict.get('gender', 'Unknown'))  # 输出: Unknown

字典的遍历

可以使用 for 循环遍历字典的键、值或键值对。

# 遍历字典的键
for key in my_dict:
    print(key)

# 遍历字典的值
for value in my_dict.values():
    print(value)

# 遍历字典的键值对
for key, value in my_dict.items():
    print(f"{key}: {value}")

字典的合并

可以使用 update 方法将一个字典的键值对合并到另一个字典中。如果键已存在,则更新其值。

# 合并两个字典
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict1.update(dict2)
print(dict1)  # 输出: {'a': 1, 'b': 3, 'c': 4}

字典的推导式

字典推导式是一种简洁的创建字典的方法,类似于列表推导式。

# 使用字典推导式创建字典
squares = {x: x**2 for x in range(6)}
print(squares)  # 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

字典的排序

字典本身是无序的,但可以通过 sorted 函数对字典的键或值进行排序。

# 对字典的键进行排序
sorted_keys = sorted(my_dict.keys())
print(sorted_keys)  # 输出: ['age', 'city', 'name']

# 对字典的值进行排序
sorted_values = sorted(my_dict.values())
print(sorted_values)  # 输出: [26, 'Alice', 'New York']

字典的嵌套

字典可以嵌套其他字典,形成复杂的数据结构。

# 创建一个嵌套字典
nested_dict = {
    'person1': {'name': 'Alice', 'age': 25},
    'person2': {'name': 'Bob', 'age': 30}
}

# 访问嵌套字典中的值
print(nested_dict['person1']['name'])  # 输出: Alice

字典的删除

可以使用 del 语句删除字典中的键值对,或使用 pop 方法删除并返回指定键的值。

# 删除字典中的键值对
del my_dict['city']
print(my_dict)  # 输出: {'name': 'Alice', 'age': 26}

# 使用 pop 方法删除并返回值
age = my_dict.pop('age')
print(age)  # 输出: 26
print(my_dict)  # 输出: {'name': 'Alice'}

字典的默认值

可以使用 collections.defaultdict 来创建一个默认值字典,当访问不存在的键时,返回默认值。

from collections import defaultdict

# 创建一个默认值为 0 的字典
default_dict = defaultdict(int)
default_dict['a'] += 1
print(default_dict)  # 输出: defaultdict(<class 'int'>, {'a': 1})

 

字典的浅拷贝与深拷贝

使用 copy 方法可以进行字典的浅拷贝,使用 copy.deepcopy 可以进行深拷贝。

import copy

# Original dictionary with nested structure
original_dict = {
    'name': 'Alice',
    'age': 30,
    'address': {
        'street': '123 Main St',
        'city': 'Wonderland'
    }
}

# Create a shallow copy of the original dictionary
shallow_copied_dict = original_dict.copy()

# Create a deep copy of the original dictionary
deep_copied_dict = copy.deepcopy(original_dict)

# Modify the nested dictionary in the original
original_dict['address']['city'] = 'New Wonderland'

# Print out all dictionaries
print("Original Dictionary:")
print(original_dict)

print("\nShallow Copied Dictionary:")
print(shallow_copied_dict)

print("\nDeep Copied Dictionary:")
print(deep_copied_dict)

字典的键值查找

可以使用 in 关键字检查字典中是否存在某个键或值。

my_dict = {
    'name': 'Alice',
    'age': 30,
    'city': 'Wonderland'
}

# 检查字典中是否存在某个键
print('name' in my_dict)  # 输出: True

# 检查字典中是否存在某个值
print('Alice' in my_dict.values())  # 输出: True

 

字典的键值去重

可以使用 set 对字典的键值进行去重。

my_dict = {
    'person1': 'Alice',
    'person2': 'Bob',
    'person3': 'Alice',  # 重复的值
    'person4': 'Charlie',
    'person5': 'Bob'      # 重复的值
}

unique_values = set(my_dict.values())
print(unique_values)  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云攀登者-望正茂

你的鼓你的鼓励是我前进的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值