当前位置:   article > 正文

Python中字典(dict)和集合(set)区别与联系_dict set

dict set

核心知识点

1.set是一个无序不重复的序列

2.可以用 { } 或者 set( ) 函数创建集合

3.集合存放不可变类型(字符串、数字、元组

注意:创建一个空集合必须用 set( ) 而不是 { } ,因为 { } 是用来创建一个空字典

Python列表(list)、元组(tuple)、字典(dict)和集合(set)详解

        Python 序列(Sequence): 是指按特定顺序依次排列的一组数据,它们可以占用一块连续的内存,也可以分散到多块内存中。Python 中的序列类型包括列表(list)、元组(tuple)、字典(dict)和集合(set)。

        数据是有序:列表(list)和元组(tuple)比较相似,它们都按顺序保存元素,所有的元素占用一块连续的内存,每个元素都有自己的索引,因此列表和元组的元素都可以通过索引(index)来访问。它们的区别在于:列表是可以修改的,而元组是不可修改的。

        数据是无序:字典(dict)和集合(set)存储的数据都是无序的,每份元素占用不同的内存,其中字典元素以 【key-value 】的形式保存。
 

二、set集合详解

        Python 中的集合,和数学中的集合概念一样,用来保存不重复的元素,即集合中的元素都是唯一的,互不相同。

从形式上看,和字典类似,Python 集合会将所有元素放在一对大括号 {} 中,相邻元素之间用“,”分隔,如下所示:

{element1,element2,...,elementn}

        其中,elementn 表示集合中的元素,个数没有限制。

        从内容上看,同一集合中只能存储不可变的数据类型,包括整形、浮点型、字符串、元组, 无法存储列表、字典、集合这些可变的数据类型,否则 Python 解释器会抛出 TypeError 错误。比如说:

  1. >>> {{'a':1}}
  2. Traceback (most recent call last):
  3. File "<pyshell#8>", line 1, in <module>
  4. {{'a':1}}
  5. TypeError: unhashable type: 'dict'
  6. >>> {[1,2,3]}
  7. Traceback (most recent call last):
  8. File "<pyshell#9>", line 1, in <module>
  9. {[1,2,3]}
  10. TypeError: unhashable type: 'list'
  11. >>> {{1,2,3}}
  12. Traceback (most recent call last):
  13. File "<pyshell#10>", line 1, in <module>
  14. {{1,2,3}}
  15. TypeError: unhashable type: 'set'

        并且需要注意的是,数据必须保证是唯一的,因为集合对于每种数据元素,只会保留一份。 例如:

  1. >>> {1,2,1,(1,2,3),'c','c'}
  2. {1, 2, 'c', (1, 2, 3)}

        由于 Python 中的 set 集合是无序的,所以每次输出时元素的排序顺序可能都不相同。

        其实,Python 中有两种集合类型,一种是 set 类型的集合,另一种是 frozenset 类型的集合,它们唯一的区别是,set 类型集合可以做添加、删除元素的操作,而 forzenset 类型集合不行。

三、set集合和dict的区别

        准确来说dict是set的一种特殊情况,set可以存储整型、浮点型、字符串、数组、列表、元组等常见的数据类型,而dict存储时存储的是以键值对为基础的数据,像上面set已有例子就不仔细介绍了,下面介绍下dict类型:

  1. dict_data = {'name': 'mike', 'dob': '1999-01-01', 'gender': 'male'}
  2. print(dict_data)
  3. >>>
  4. {'name': 'mike', 'dob': '1999-01-01', 'gender': 'male'}
  5. <class 'dict'>
  6. 进程已结束,退出代码为 0

        冒号前为键,冒号后为键值,两者一一对应,其也具有set的相关性质,键必须为唯一值。

        当访问信息时,利用字典在运行时间上在数据比较大时会快很多,因为set结构访问时只能通过遍历去访问,而dict数据通过键值对对应,访问起来就比较迅速,下面介绍下两者的工作原理:

  字典和集合的内部结构都是一张哈希表对于字典而言,这张表存储了哈希值(hash)、键和值这 3 个元素,而对集合来说,哈希表内只存储单一元素

  1. | 哈希值 (hash) 键 (key) 值 (value)
  2. . | ...
  3. 0 | hash0 key0 value0
  4. . | ...
  5. 1 | hash1 key1 value1
  6. . | ...
  7. 2 | hash2 key2 value2
  8. . | ...

        随着哈希表的扩张,它会变得越来越稀疏,显然,这样非常浪费存储空间。为了提高存储空间的利用率,现在的哈希表除了字典本身的结构,会把索引和哈希值、键、值单独分开,也就是采用如下这种结构:

  1. Indices
  2. ----------------------------------------------------
  3. None | index | None | None | index | None | index ...
  4. ----------------------------------------------------
  5. Entries
  6. --------------------
  7. hash0 key0 value0
  8. ---------------------
  9. hash1 key1 value1
  10. ---------------------
  11. hash2 key2 value2
  12. ---------------------
  13. ...
  14. ---------------------

        因此,在数据量比较大的时候,建议采用dict的方法进行相关的数据处理方法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/490031
推荐阅读
相关标签
  

闽ICP备14008679号