【python】我很遗憾没有早点知道 Python 字典的 8 个功能
【python】我很遗憾没有早点知道 Python 字典的 8 个功能
ytkz这些技巧使得处理 Python 中的字典变得更加愉快和优雅。
1)使用 dict(key=value) 创建字典
# 正常的方式创建字典,使用字典推导式的语法
normal_dict = {
'red': 'apple',
'orange': 'orange', # 注意颜色和水果名称相同,但这里用作键和值
'yellow': 'banana',
'green': 'grape'
}
# '更好'的方式创建同样的字典,使用dict()构造函数和关键字参数
better_dict = dict(
red='apple', # 键值对直接在函数调用中定义
orange='orange', # 注意这种方式避免了使用元组或列表
yellow='banana', # 直接键=值的形式
green='grape' # 不需要额外的括号或逗号分隔
)
# 打印两个字典以验证它们是否相同
print(normal_dict)
print(better_dict)
为什么后一种是更好的方法,原因有1个:可以省略引号。
- 当我们使用时
{}
,我们需要在字符串键上输入引号字符 - 例如
'apple'
'orange'
等等 - 随着我们必须处理越来越多的按键,输入引号字符变得越来越烦人
- 当我们使用时
dict()
,我们可以忽略引号字符
当然,该dict()
方法不适用于非字符串键,因此两种方法都有其用途。
2)使用 ** 组合字典
# 有2个字典
a = {1:10, 2:20}
b = {3:30, 4:40}
# 可以使用 ** 对这两个字典进行组合
x = {**a, **b}
print(x) # {1:10, 2:20, 3:30, 4:40}
3)我们可以使用 ** 来传递字典作为关键字参数
普通形式:
def test(a, b, c):
print(a, b, c)
test(a=10, c=20, b=30) # 10 30 20
我们也可以动态地将包含键 a
b
和 c
的字典传递到这个函数中
mydict = dict(a=1, b=2, c=3)
print(mydict) # {'a':10, 'b':20, 'c':30}
# 这和test(a=10, b=20, c=30)是一样的
test(**mydict) # 10 20 30
4)字典推导式
假设我们要创建 {1:1, 2:4, 3:9, 4:16}
,以下展示两种方法:
1.正常方式创建字典,使用for循环
2.使用字典推导式创建同样的字典
代码如下:
# 正常方式创建字典,使用for循环
d = {} # 初始化一个空字典
for i in range(1, 5): # 循环遍历从1到4的数字
d[i] = i**2 # 将i及其平方作为键值对加入字典
print(d) # 输出字典:{1: 1, 2: 4, 3: 9, 4: 16}
# 使用字典推导式创建同样的字典
# 这是一种更简洁的创建字典的方式,一行代码完成所有操作
d = {i: i**2 for i in range(1, 5)} # 直接在花括号内定义字典,i是键,i**2是对应的值
print(d) # 输出字典:{1: 1, 2: 4, 3: 9, 4: 16}
在这两个示例中,最终创建的字典d
是一样的,但字典推导式提供了一种更紧凑的语法,尤其适用于可以使用某种模式或函数映射来定义键值对的情形。这种方式不仅减少了代码量,而且通常也提高了代码的可读性和执行效率。
5) dict.get(key, default_value)
当我们访问一个不存在的密钥时,我们会得到 KeyError
d = {1:1, 2:2, 3:3}
print(d[1]) # 1
print(d[4]) # KeyError
如果我们确实不想要 KeyError,我们可以使用 .get()
方法来代替,如果我们的密钥不存在,该方法将返回 None
。
d = {1:1, 2:2, 3:3}
print(d.get(1)) # 1
print(d.get(4)) # None
我们也可以定义自定义默认值。
d = {1:1, 2:2, 3:3}
print(d.get(1, 100)) # 1
print(d.get(4, 100)) # 100
print(d.get(9, 100)) # 100
6) 使用元组列表创建 dict()
# 创建一个列表,其中的元素是长度为2的元组
ls = [('apple', 4), ('orange', 5), ('pear', 6)]
# 使用dict()构造函数将列表转换成字典
# 元组的第一个元素作为键,第二个元素作为值
d = dict(ls)
# 打印转换后的字典
print(d) # 输出:{'apple': 4, 'orange': 5, 'pear': 6}
这种方式非常实用,尤其是在处理从外部数据源(如CSV文件、数据库查询结果等)获取的数据时,这些数据源经常以键值对的形式组织,而Python的元组列表正好可以表示这样的键值对。通过dict()
函数,可以快速方便地将这些数据转换成字典,便于后续的数据处理和操作。
7) .items() 和 .values()
在Python中,字典(dict
)提供了多种方法来访问其内部的键、值或键值对。.items()
, .keys()
, 和 .values()
是其中最常用的三种方法,它们分别允许你以迭代的方式访问字典中的键值对、键和值。
my_dict = {'a': 1, 'b': 2, 'c': 3}
for key, value in my_dict.items():
print(key, value)
输出将会是:
a 1
b 2
c 3
8.字典键
一般来说:
不可变数据类型可以是字典键,例如。 int
str
tuple
bool
可变数据类型不能作为字典键,例如。 list
dict
小结
总结上述关于Python字典处理技巧的关键点:
- 创建字典:使用
dict()
构造函数可以直接以关键字参数的形式创建字典,省去了在键周围添加引号的步骤,对于字符串键尤其便捷。 - 合并字典:利用
**
运算符可以轻松地将两个或多个字典合并为一个新的字典。 - 传递字典作为参数:
**
同样可以用来将字典的键值对展开为函数的参数,实现动态参数传递。 - 字典推导式:使用字典推导式可以简洁地基于某个模式或规则创建字典,提高代码的可读性和效率。
- 安全访问字典键:
dict.get(key, default)
方法允许安全访问字典中的键,如果键不存在,可以返回指定的默认值,避免了KeyError
异常。 - 从元组列表创建字典:
dict()
可以从一个元组列表创建字典,其中元组的第一个元素作为键,第二个元素作为值,适合处理外部数据源。 - 迭代字典:
.items()
,.keys()
, 和.values()
方法提供访问字典键值对、键和值的功能,便于遍历和操作字典。 - 字典键类型:字典的键必须是不可变类型,如整数、字符串、元组或布尔值,而可变类型如列表或字典不能作为键使用。
这些技巧覆盖了字典创建、操作、访问和迭代的各个方面,有助于编写更加高效、优雅的Python代码。掌握这些技巧可以让我们在处理复杂数据结构时更加得心应手。