初始化字典的首选语法是:curly brace literals {}或dict()函数?

我正在努力学习Python,并且正在密切关注通用编码标准。 这看起来像是一个毫无意义的挑剔问题,但是我正在努力把精力集中在我学习的最佳实践上,所以我不必忘记任何“坏”的习惯。

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

a = { 'a': 'value', 'another': 'value', } b = dict( a='value', another='value', ) 

哪个被认为是“更pythonic”? 你用哪个? 为什么?

大括号。 将关键字parameter passing给dict() ,虽然它在很多情况下都能很好地工作,但只有当键是有效的Python标识符时才能初始化映射。

换句话说它不能这样做:

 a = {'import': 'trade', 1: 7.8} 

第一,花括号。 否则,你会遇到与其中有奇数字符的键一致的问题,如=

 # Works fine. a = { 'a': 'value', 'b=c': 'value', } # Eeep! Breaks if trying to be consistent. b = dict( a='value', b=c='value', ) 

第一个版本是可取的:

  • 它适用于各种按键,例如,你可以说{1: 'one', 2: 'two'} 。 第二个变体只适用于(某些)string键。 根据键的types使用不同types的语法将是不必要的不​​一致。
  • 速度更快:

     $ 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 
  • 如果不打算使用字典文字的特殊语法,则可能不存在。

我认为第一个select是更好的,因为你将要访问的值是['a']或['another']。 字典中的键是string,没有理由假装它们不是。 对我来说,关键字语法起初看起来很聪明,但是在第二次看来却很模糊。 这只对我有意义,如果你正在使用__dict__ ,关键字将成为后来的属性,类似的东西。

仅供参考,如果您需要添加属性到您的字典(附加到字典的东西,但不是关键之一),那么您将需要第二种forms。 在这种情况下,您可以使用具有任意字符的键来初始化字典,如下所示:

  class mydict(dict): pass a = mydict() a["b=c"] = 'value' a.test = False 

有时候dict()是一个不错的select:

 a=dict(zip(['Mon','Tue','Wed','Thu','Fri'], [x for x in range(1, 6)])) mydict=dict(zip(['mon','tue','wed','thu','fri','sat','sun'], 

(random.randint(0,100)for x in range(0,7)]))