首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >匿名字典还是dict()函数: Python中字典创建方式的选择

匿名字典还是dict()函数: Python中字典创建方式的选择

原创
作者头像
用户11021319
发布2024-04-07 09:25:53
发布2024-04-07 09:25:53
8450
举报

1、问题背景

在 Python 中,当您要将一个字典的值传递给函数,或以其他方式使用一个不会被重复利用的临时字典时,有两种简单的方法可以做到这一点:

一种是使用 dict() 函数创建字典:

代码语言:python
复制
foo.update(dict(bar=42, baz='qux'))

另一种是使用匿名字典:

代码语言:javascript
复制
foo.update({'bar': 42, 'baz': 'qux'})

那么,您更喜欢哪种方法?除了个人风格外,在选择其中一种方法时是否还有其他原因?

2、解决方案

对于这个问题,不同的程序员有不同的偏好和看法,下面是几位程序员的回答:

答案1:

我更喜欢匿名字典选项。我不喜欢 dict() 选项,因为我不喜欢像这样不必要地调用函数,这会增加您不需要的开销:

代码语言:javascript
复制
>>> from timeit import Timer
>>> Timer("mydict = {'a' : 1, 'b' : 2, 'c' : 'three'}").timeit()
0.91826782454194589
>>> Timer("mydict = dict(a=1, b=2, c='three')").timeit()
1.9494664824719337

答案2:

我认为在这种特殊情况下,我可能会更喜欢这样:

代码语言:javascript
复制
foo.update(bar=42, baz='qux')

在更一般的情况下,我通常更喜欢文字语法(您称之为匿名字典,尽管使用 {} 和使用 dict() 一样匿名)。我认为这更清楚地说明了维护程序员(通常是我自己),部分原因是它在使用语法突出显示的文本编辑器中非常突出。它还确保了当我必须添加一个不能表示为 Python 名称的键(比如带有空格的键)时,我不必重新编写整行。

答案3:

我的回答主要是关于使用字典和关键字参数设计 API。但它也适用于 {…} 和 dict(…) 的单独使用。

要点:保持一致性。如果您的大多数代码将 ‘bar’ 作为字符串引用,请在 {…} 中保持为字符串;如果您通常将其称为标识符 bar,请使用 dict(bar=…)。

答案4:

我更喜欢您的“匿名字典”方法,我认为这纯粹是个人风格。我只是觉得后一种版本更具可读性,但它也是我习惯看到的。

答案5:

dict() 方法增加了函数调用的开销。

代码语言:javascript
复制
>>>import timeit,dis
>>> timeit.Timer("{'bar': 42, 'baz': 'qux'}").repeat()
[0.59602910425766709, 0.60173793037941437, 0.59139834811408321]
>>> timeit.Timer("dict(bar=42, baz='qux')").repeat()
[0.98166498814792646, 0.97745355904172015, 0.99231773870701545]

答案6:

我也是,只是出于个人风格。

答案7:

如果我有许多参数,有时省略键上的引号会很好:

代码语言:javascript
复制
DoSomething(dict(
   Name = 'Joe',
   Age = 20,
   Gender = 'Male',
   ))

顺便说一下,这是一个非常主观的问题。

答案8:

我认为 dict() 函数真正存在是为了让您可以从其他内容(也许是一些可以轻松生成必要关键字参数的内容)创建字典。匿名方法最适合“字典文字”,就像您使用 “” 表示字符串,而不是 str() 一样。

总之,在 Python 中使用 dict() 函数还是匿名字典来创建字典,很大程度上取决于个人喜好和具体的使用场景。dict() 函数可以更明确地指定键值对,而匿名字典则更简洁直观。在使用时,应根据具体情况选择最合适的方法。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、问题背景
  • 2、解决方案
    • 答案1:
    • 答案2:
    • 答案3:
    • 答案4:
    • 答案5:
    • 答案6:
    • 答案7:
    • 答案8:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档