dao*_*oad 204 python dictionary
我正在努力学习Python,我正在密切关注常见的编码标准.这可能看起来像是一个毫无意义的挑剔问题,但我正在努力专注于我学习的最佳实践,所以我不必忘记任何"坏"习惯.
我看到两种常用的方法来初始化dict:
a = {
'a': 'value',
'another': 'value',
}
b = dict(
a='value',
another='value',
)
Run Code Online (Sandbox Code Playgroud)
哪个被认为是"更加pythonic"?你用哪个?为什么?
Wai*_*ung 228
大括号.传递关键字参数dict()虽然在很多场景中都能很好地工作,但只有在密钥是有效的Python标识符时才能初始化映射.
换句话说,它不能做:
a = {'import': 'trade', 1: 7.8}
Run Code Online (Sandbox Code Playgroud)
Amb*_*ber 82
第一个,花括号.否则,您会遇到包含奇数字符的键的一致性问题,例如=.
# Works fine.
a = {
'a': 'value',
'b=c': 'value',
}
# Eeep! Breaks if trying to be consistent.
b = dict(
a='value',
b=c='value',
)
Run Code Online (Sandbox Code Playgroud)
ste*_*han 57
第一个版本更可取:
{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
Run Code Online (Sandbox Code Playgroud)小智 6
我几乎总是使用花括号;但是,在我编写测试的某些情况下,我会进行关键字打包/解包,并且在这些情况下 dict() 更易于维护,因为我不需要更改:
a=1,
b=2,
Run Code Online (Sandbox Code Playgroud)
到:
'a': 1,
'b': 2,
Run Code Online (Sandbox Code Playgroud)
在某些情况下,我认为我可能想稍后将其转换为命名元组或类实例,这也有帮助。
在实现本身,由于我对优化的痴迷,并且当我没有看到特别巨大的可维护性好处时,我总是喜欢花括号。
在测试和实现中,如果当时或将来添加的键有可能会:
dict(1foo=2)引发 SyntaxError)