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

2013-02-25 11:13:13 +08:00
 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

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

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

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

如果大量创建,为了效率则还是{}比较好
jybox
2013-02-25 12:35:12 +08:00
我不是很了解Python, 但类似这样的争议在其他语言也有.

我觉得还是应该从编写方便、可读性方面来考虑, 至于解释器的问题, 如果问题明显, 人家早晚会改正的, 不明显的话忽略就是了.
goxofy
2013-02-25 12:40:05 +08:00
dict()
ipconfiger
2013-02-25 13:39:14 +08:00
这么用类似于
def d(**kwargs):
return kwargs

然后就可以 d(a=1,b=2)
其实dict还可以 dict([("a",1),("b",2)])
TankyWoo
2013-02-25 13:52:00 +08:00
@ipconfiger

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

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

dict() 的效率比 {} 要慢好几倍,但为了代码的直观性还是建议用 dict()
TankyWoo
2013-02-27 18:07:22 +08:00
@Mattsive

我给的链接就是这篇文章。。。
zhangxiao
2013-02-28 00:04:55 +08:00
{},可能js带的习惯吧
est
2013-02-28 08:35:59 +08:00
新建空dict用 a = {}

深复制dict用 a = dict(b, newkey='newval') 更加优雅。
mengzhuo
2013-02-28 10:06:24 +08:00
{}
这个才是Pythonic的写法
再说字典推导的时候能用dict()吗~
TankyWoo
2013-02-28 10:52:53 +08:00
@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://www.v2ex.com/t/61265

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

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

© 2021 V2EX