当前位置:  开发笔记 > 编程语言 > 正文

dict和set之间的区别(python)

如何解决《dict和set之间的区别(python)》经验,为你挑选了3个好方法。

所以,我知道这个,

a = {}  # dict

构造一个空字典.现在,我也接受了这个,

b = {1, 2, 3}  # set

创建一个集合.这很容易验证,因为,

>>>print(type(a))


>>>print(type(b))

虽然我理解它的作用,但我不明白为什么我们为集合和字典使用相同的语法.我试图找到有关在这背后的逻辑更多信息,setdict本手册的部分,但遗憾的是,我什么都没出来.

任何人都可以向我解释为什么我们这样做?这是出于历史原因,还是我错过了一些明显的东西?



1> myaut..:

Python 2 中没有设置文字,历史上只用于字典的花括号.可以从列表(或任何迭代)生成集合:

set([1, 2, 3])
set([i for i in range(1, 3)])

Python 3引入了集合文字和理解(参见PEP-3100),它允许避免使用中间列表:

{1, 2, 3}
{i for i in range(1, 3)}

空集表单,但是为字典保留为向后兼容性.检查PEP-3100的参考资料,即:P3K中的[Python-3000]设置?

我确信我们可以解决问题 - 我同意,{}对于空集和{:} 空字典是理想的,如果不是为了向后兼容.当我第一次写PEP时,我喜欢"特殊的空对象"的想法(即,有些{}东西可以变成一个集合或字典)​​,但是这里的一位教师让我相信它只会导致新人混淆思想(以及实施的痛苦).

将以下信息更好地描述这些规则:

我认为Guido有最好的解决方案.使用set()空套,使用{} 空类型的字典,使用{genexp}了一套推导/显示器,使用 {1,2,3}显式集文字,并使用{k1:v1, k2:v2}了字典文字.如果需求超过厌恶,我们总是可以添加{/更}晚.



2> Martijn Piet..:

语法一样.字典首先使用花括号,并指定键值对,其中键和值由冒号分隔:

>>> {'foo': 'bar'}
{'foo': 'bar'}
>>> type(_)

稍后将集添加到语言中,{..}大括号表示法仅指定元素,而不是对:

>>> {'foo'}
set(['foo'])
>>> type(_)

请注意,在Python 2中,解释器使用set()callable 回显对象.这也是你如何指定一个集:

>>> emptyset = set()

在Python 3中,{..}在回显对象时使用较新的表示法,除非它是空的:

>>> {'foo'}
{'foo'}
>>> _ - {'foo'}  # difference, removing the one element
set()

set()类型在2.4版本中添加到Python语言中(参见PEP 218),在Python 3中添加了set literals的大括号语法,并反向移植到Python 2.7.



3> Mike Müller..:

{}用于空字典而不是空集的事实在很大程度上是历史原因.{'a': 100, 'b': 200}自Python开始以来,字典的语法就已存在.{1, 2, 3}使用Python 2.7引入了集合的语法.由于{}已经使用了这么长时间,它将作为定义空字典的方式.如果Python从一开始就有了新的set语法,那么很可能会定义一个空集{}和一个空字典{:}.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有