Python dict() 语法
dict() 是 Python 的一个内置函数,它用于创建一个 字典。dict() 函数提供了 3 种创建字典的方式。
- 如果只有关键字参数,则根据关键字参数及其值创建字典。
- 如果第一个参数是映射对象(如字典),则会根据该字典以及后面的关键字参数 “组合” 来创建字典。
- 如果第一个参数是可迭代对象,则会根据该可迭代对象以及后面的关键字参数 “组合” 来创建字典。
语法:
dict(**kwargs)
dict(mapping, **kwargs)
dict(iterable, **kwargs)说明:
dict() 函数有 3 种语法格式,参数说明如下。
**kwargs(可选):它是关键字参数。比如 dict( a = 1, b = 2 ) 就使用了关键字参数。关于关键字参数是什么,另请参阅:Python 函数参数。mapping(可选):它是另一个字典。比如 dict( { 'c': 3 } , a = 1, b = 2 )。当 mapping 与关键字参数存在重复键时,关键字参数的值会覆盖映射中的值。iterable(可选):它是一个可迭代对象。但并非所有可迭代对象都可用于 dict()。只有类似二维列表的可迭代对象才可以,比如 [ (1, "red"), (2, "blue"), (3, "green") ]、[ [1, "red"], [2, "blue"], [3, "green"] ] 等。
与直接使用花括号 “{}” 语法相比,dict() 提供了更灵活的字典创建方式,尤其是在需要从其他数据结构转换时。
注意:
- dict() 总是创建一个新的字典对象。
- 字典的键必须是可哈希的对象(比如数字、字符串、元组),而值可以是任何类型的对象。
- 可迭代对象的元素必须是 (key, value) 形式的二维结构,否则会引发 ValueError 异常。
Python dict() 摘要
| 使用频率 | 中 |
|---|---|
| 官方文档 | 查看 |
| 相关函数 | set() |
Python dict() 示例
接下来,我们通过几个简单的例子来讲解一下 Python dict() 函数是如何使用的。
示例 1:dict() 创建空字典
d = dict()
print(d)运行结果如下。
{}分析:
想要创建一个空字典,其实有以下 2 种方式。
# 方式 1
d = dict()
# 方式 2(推荐)
d = {}示例 2:dict(**kwargs)
result = dict(a=1, b=2, c=3)
print(result)运行结果如下。
{'a': 1, 'b': 2, 'c': 3}示例 3:dict(mapping, **kwargs)
result = dict({'d': 4}, a=1, b=2, c=3)
print(result)运行结果如下。
{'d': 4, 'a': 1, 'b': 2, 'c': 3}示例 4:dict(iterable, **kwargs)
result = dict([(4, 'red'), (5, 'green'), (6, 'blue')], a=1, b=2, c=3)
print(result)运行结果如下。
{4: 'red', 5: 'green', 6: 'blue', 'a': 1, 'b': 2, 'c': 3}分析:
除了创建字典对象之外,dict() 还可以将其他类型对象转换为字典对象。请看下面例子。
示例 5:dict() 将 “其他可迭代对象” 转换为字典
items = [('a', 1), ('b', 2), ('c', 3)]
d = dict(items)
print(d)运行结果如下。
{'a': 1, 'b': 2, 'c': 3}分析:
如果传入一个可迭代对象,该对象每个元素都是长度为 2 的列表或元组,那么 dict() 函数会将每个列表或元组的第 1 个元素作为键,第 2 个元素作为值,然后去生成一个字典对象。
# 错误案例(元素长度不符)
try:
dict([(1,2,3)]) # 引发 ValueError
except ValueError as e:
print(e)dict() 最佳实践
虽然 dict() 函数提供了多种创建字典的方式,但在实际编程中,我们通常会结合它的不同用法和更简洁的语法来达到最佳效果。
1. 优先使用 “{}” 创建字典
如果只是单纯想创建一个字典,我们更推荐使用大括号 “{}” 的方式。这种方式比使用 dict() 函数更简单方便。下面两种写法是等价的:
# 使用 “{}”(推荐)
students = {'Jack': 1001, 'Lucy': 1002, 'Tony': 1003}
# 使用 dict()
students = dict(Jack=1001, Lucy=1002, Tony=1003)2. 动态合并字典
当需要合并多个数据源时,使用 dict() 会比 “{}” 更加灵活。
base_config = {'timeout': 30}
user_config = dict(base_config, retries=3, debug=True)
print(user_config) # 输出 : {'timeout': 30, 'retries': 3, 'debug': True}3. 初始化默认值
我们可以使用 dict.fromkeys() 方法来初始化默认值。
# 所有键共享同一个默认值(需注意可变对象问题)
keys = ['a', 'b', 'c']
default_dict = dict.fromkeys(keys, 0)
print(default_dict) # 输出 : {'a': 0, 'b': 0, 'c': 0}常见问题
1. 为什么 dict( key = value ) 中的 “键” 不能是数字或表达式?
对于关键字参数来说,它的语法要求 “键” 必须是有效的标识符(如字母开头)。数字或表达式需要通过其他方式,比如:
d = dict([('1', 'one'), (2, 'two')]) # 正确