【python】我很遗憾没有早点知道 Python 字典的 8 个功能

这些技巧使得处理 Python 中的字典变得更加愉快和优雅。

Python Programming Language: Everything You Need to Know - Loud Bench

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 bc 的字典传递到这个函数中

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字典处理技巧的关键点:

  1. 创建字典:使用dict()构造函数可以直接以关键字参数的形式创建字典,省去了在键周围添加引号的步骤,对于字符串键尤其便捷。
  2. 合并字典:利用**运算符可以轻松地将两个或多个字典合并为一个新的字典。
  3. 传递字典作为参数**同样可以用来将字典的键值对展开为函数的参数,实现动态参数传递。
  4. 字典推导式:使用字典推导式可以简洁地基于某个模式或规则创建字典,提高代码的可读性和效率。
  5. 安全访问字典键dict.get(key, default)方法允许安全访问字典中的键,如果键不存在,可以返回指定的默认值,避免了KeyError异常。
  6. 从元组列表创建字典dict()可以从一个元组列表创建字典,其中元组的第一个元素作为键,第二个元素作为值,适合处理外部数据源。
  7. 迭代字典.items(), .keys(), 和 .values()方法提供访问字典键值对、键和值的功能,便于遍历和操作字典。
  8. 字典键类型:字典的键必须是不可变类型,如整数、字符串、元组或布尔值,而可变类型如列表或字典不能作为键使用。

这些技巧覆盖了字典创建、操作、访问和迭代的各个方面,有助于编写更加高效、优雅的Python代码。掌握这些技巧可以让我们在处理复杂数据结构时更加得心应手。