初始化字典的首选语法是: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)]))