【问题标题】:dict() vs { } in python which is better? [closed]python中的dict() vs {}哪个更好? [关闭]
【发布时间】:2013-06-10 11:35:31
【问题描述】:

我想知道,在以下 2 种方法中声明字典的最佳做法是什么?为什么?

>>>a=dict(one=2, two=3)  # {"two":3, "one":2}
>>>a={"two":3, "one":2}

【问题讨论】:

  • FWIW,我发现了一个不同之处。 dict(zip(foo)) 是可能的。不知道为什么 {zip(foo)} 在 python 2 或 3 中都是不可能的。我来到这里希望了解原因。
  • 为什么这个问题被关闭了?投票决定关闭它的人本可以通过添加标准来定义better而不是关闭来改进它。
  • “哪个更好”而不定义“更好”的含义是广泛的方式

标签: python python-2.7


【解决方案1】:

你会相信someone has already analyzed that(从性能的角度来看)。

在 CPython 2.7 中,使用 dict() 创建字典最多需要 6 个 时间长,涉及的内存分配操作比 字面语法。使用 {} 创建字典,特别是如果您是 预先填充它们,除非文字语法不适用于您的 案例。

【讨论】:

  • 考虑到关键字参数作为字典传递,然后必须由dict 构造函数再次复制,这并不奇怪。
  • 有人愿意为 py 3.7 更新这个答案吗?
  • 对于 python3.6 dict() 比 {} 慢 2.5 倍。预填充时,差异为 2 倍。
  • @mahoriR 来源?
【解决方案2】:

第二个更清晰,更易于阅读,并且为此存在特定的语法是一件好事,因为这是一个非常常见的操作:

a = {"two":3, "one":2}

在一般情况下应该首选它。性能参数是次要问题,但即便如此,{} 语法更快。

【讨论】:

    【解决方案3】:

    在 Python 中,您应该尽可能使用文字语法。所以[] 用于列表,{} 用于 dicts 等。其他人更容易阅读,看起来更好,并且解释器会将其转换为更快执行的字节码(容器的特殊操作码,而不是执行函数调用) .

    【讨论】:

    • 我没有找到像“更容易阅读,看起来更好”这样的主观理由好的论据:)
    • @Matt 我认为主要的收获是“进入执行速度更快的字节码”,其他人主观地加强了论点,但为了回应你的观点:{[(name, cls) for name, cls in dataset_types.__dict__.items() if isinstance(cls, type)]}dict([(name, cls) for name, cls in dataset_types.__dict__.items() if isinstance(cls, type)]),我认为dict() 的版本更容易阅读。
    • @Matt 我想他们是。正如另一条评论中所述,在某些情况下非文字语法更容易阅读。我认为最好在每种情况下使用最容易阅读的内容。但是,是的,文字语法的性能开销也较小。
    • dict{} 更“易读”,意思也更清晰... ...
    • @Matt - 这实际上不是主观的。可读性是 PEP20。
    猜你喜欢
    • 2014-07-26
    • 2015-06-10
    • 2016-06-15
    • 2013-06-28
    • 2020-06-15
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多