初始化字典时,首选语法是使用大括号 {} 还是 dict() 函数?

269 投票
7 回答
443157 浏览
提问于 2025-04-15 22:49

我正在努力学习Python,并且非常关注常见的编码标准。这个问题可能看起来有点小题大做,但我希望在学习的过程中专注于最佳实践,这样以后就不需要去纠正一些“坏习惯”了。

我看到有两种常见的方法来初始化一个字典:

a = {
    'a': 'value',
    'another': 'value',
}

b = dict( 
    a='value',
    another='value',
)

哪种方法被认为是“更符合Python风格”的呢?你通常使用哪种?为什么?

7 个回答

65

第一种版本更好:

  • 它适用于各种类型的键,比如你可以写 {1: 'one', 2: 'two'}。而第二种写法只适用于(某些)字符串类型的键。根据键的类型使用不同的语法,会让人觉得不太一致,没必要。
  • 它的速度更快:

    $ python -m timeit "dict(a='value', another='value')"
    1000000 loops, best of 3: 0.79 usec per loop
    $ python -m timeit "{'a': 'value','another': 'value'}"
    1000000 loops, best of 3: 0.305 usec per loop
    
  • 如果字典字面量的特殊语法不是为了使用而设计的,那它可能就不会存在。
100

首先,使用大括号。否则,你可能会遇到一些问题,比如键里面有奇怪的字符,比如=,这样会导致不一致。

# Works fine.
a = {
    'a': 'value',
    'b=c': 'value',
}

# Eeep! Breaks if trying to be consistent.
b = dict( 
    a='value',
    b=c='value',
)
296

花括号。通过 dict() 传递关键字参数,虽然在很多情况下都能很好地工作,但只有当键是有效的Python标识符时,才能初始化一个字典。

这个是可以的:

a = {'import': 'trade', 1: 7.8}
a = dict({'import': 'trade', 1: 7.8})

这个不行:

a = dict(import='trade', 1=7.8)

这会导致以下错误:

    a = dict(import='trade', 1=7.8)
             ^
SyntaxError: invalid syntax

撰写回答