[Python]大家是喜欢用{}还是dict()创建字典?

2013 年 2 月 25 日
 TankyWoo
最先开始我是用"{}",不过后来觉得"dict()"看起来舒服,逐渐改用 "dict()"了

不过今早看了Doug Hellmann的一篇文章《The Performance Impact of Using dict() Instead of {} in CPython 2.7》 http://doughellmann.com/2012/11/the-performance-impact-of-using-dict-instead-of-in-cpython-2-7-2.html

经过各种验证(不得不佩服大牛对技术的钻研精神,和对结论的严谨态度),一般情况下,还是"{}"的效率要高一些
12364 次点击
所在节点    Python
31 条回复
nervouna
2013 年 2 月 25 日
dict() 可读性更高,这个问题萝卜白菜吧。
TankyWoo
2013 年 2 月 25 日
@nervouna

嗯,我也是因为可读性,后来才喜欢用dict()的

现在感觉,如果是少量的创建字典,dict()应该看起来更舒服

如果大量创建,为了效率则还是{}比较好
jybox
2013 年 2 月 25 日
我不是很了解Python, 但类似这样的争议在其他语言也有.

我觉得还是应该从编写方便、可读性方面来考虑, 至于解释器的问题, 如果问题明显, 人家早晚会改正的, 不明显的话忽略就是了.
G0dBlessMe
2013 年 2 月 25 日
dict()
ipconfiger
2013 年 2 月 25 日
这么用类似于
def d(**kwargs):
return kwargs

然后就可以 d(a=1,b=2)
其实dict还可以 dict([("a",1),("b",2)])
TankyWoo
2013 年 2 月 25 日
@ipconfiger

dict([("a",1),("b",2)])
这个用法还是第一次见到
tonyseek
2013 年 2 月 25 日
大多数情况下第一眼看到 {} 会想到这是一个映射结构,因为 Python、Ruby、JavaScript 等语言都这么约定的,所以我不觉得 {} 的可读性不如 dict()
iEverX
2013 年 2 月 25 日
@tonyseek 同意。。{}可读性差在哪里?
TankyWoo
2013 年 2 月 25 日
@iEverX
不是说{}可读性差

可能是因为不同的人,拥有其他语言背景不一样,所以对于我,可能对dict()感觉看起来更直观一些
hit9
2013 年 2 月 25 日
dict() 我也不知道为森么
wenbinwu
2013 年 2 月 25 日
dict()
CoX
2013 年 2 月 25 日
{} 感觉很省事啊
windviki
2013 年 2 月 25 日
直接初始化还是觉得{}好看。
dict comprehension在python2.6不行,要兼容的时候就只好dict([(), ()])这样了,里面的list用list comprehension生成。
wenbinwu
2013 年 2 月 25 日
联想一下, list是用list()还是[]
Mattsive
2013 年 2 月 27 日
http://doughellmann.com/2012/11/the-performance-impact-of-using-dict-instead-of-in-cpython-2-7-2.html

dict() 的效率比 {} 要慢好几倍,但为了代码的直观性还是建议用 dict()
TankyWoo
2013 年 2 月 27 日
@Mattsive

我给的链接就是这篇文章。。。
zhangxiao
2013 年 2 月 28 日
{},可能js带的习惯吧
est
2013 年 2 月 28 日
新建空dict用 a = {}

深复制dict用 a = dict(b, newkey='newval') 更加优雅。
mengzhuo
2013 年 2 月 28 日
{}
这个才是Pythonic的写法
再说字典推导的时候能用dict()吗~
TankyWoo
2013 年 2 月 28 日
@mengzhuo

In [1]: lst = [1,2,3]

In [2]: dic = dict([(v, v*2) for v in lst])

In [3]: dic
Out[3]: {1: 2, 2: 4, 3: 6}

dict()也可以实现的,不过麻烦些

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/61265

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX