当前位置:   article > 正文

什么是字典?什么是集合?_集合可以理解为有字的字典吗

集合可以理解为有字的字典吗

字典定义

字典是由一系列键(key)值(value)对组成的元素的容器,其中,字典的key只能是不可变数据类型(字符串,整型,浮点型,元组,布尔,字典)value可以是任意的数据类型。
字典是可变的数据类型,其长度大小可变,可以任意增加、删除或者修改内部的元素
字典不支持索引操作

创建字典的5种方式

第一种:创建的同时添加键值对

dict1 = {'name':'jack','age':18'}
  • 1

第二种:先创建一个空字典,然后往里面添加键值对

dict2 = {}
dict2['name'] = 'jack'
  • 1
  • 2

第三种:dict3 = dict(变量1=值1,变量2=值2,…)

dict3 = dict(name = 'jack',age = 18)
  • 1

缺点:只有字符串可以作为key

第四种:dict4 = dict([(key1,value1),key2,value2),…]

dict4 = dict([('name','jack'),('age',18)])
  • 1

第五种:dict5 = dict(zip([所有key],[所有value])

dict5 = dict(zip(['name','age','gender'],['jack',18]))
  • 1

当key和value的数量不相等时,以数量少的最为参考

添加元素
dict[key] = value

这种方式适用于key不存在的情况下,key存在会被覆盖

dict6 = {'name':'jack','age':18}
dict6['gender'] = 'male'
  • 1
  • 2
update()

更新,合并字典,将制定字典中的键值对添加到原字典中

dict7 = {'name':'jack','age':18}
dict8 = {'gender':'male'}
dict7.update(dict8)
  • 1
  • 2
  • 3
删除元素
pop(key,default)

根据指定的key删除键值对,返回被删除的value,可以设置默认值,key不存在时返回默认值

dict7 = {'name':'jack','age':18}
dict7.pop('age',None)
Out[3]: 18
# key不存在
dict7 = {'name':'jack','age':18}
dict7.pop('gender','null')
Out[9]: 'null'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
clear()

清空字典内所有的键值对

dict7 = {'name':'jack','age':18}
dict7.clear()
dict7
Out[12]: {}
  • 1
  • 2
  • 3
  • 4
del

del 字典:删除字典
del 字典[key]:删除键值对

dict7 = {'name':'jack','age':18}
del dict7['name']
dict7
Out[15]: {'age': 18}
del dict7
dict7
Traceback (most recent call last):
  File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3267, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-17-a5c19ca6b14a>", line 1, in <module>
    dict7
NameError: name 'dict7' is not defined

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
修改元素

字典[key] = value

dict7 = {'name':'jack','age':18}
dict7['name'] = '克莱汤普森'
dict7
Out[20]: {'name': '克莱汤普森', 'age': 18}

  • 1
  • 2
  • 3
  • 4
  • 5
len()

获取字典中键值对的个数

dict7
Out[21]: {'name': '克莱汤普森', 'age': 18}
len(dict7)
Out[22]: 2
  • 1
  • 2
  • 3
  • 4
get()

字典[key]这样访问键值对的方式,在key不存在的情况下会抛出异常,get(key,default)在key不存在且设置默认之的情况下不会报错,而是返回默认值,如果没有设置默认值则返回None

dict7
Out[23]: {'name': '克莱汤普森', 'age': 18}
dict7['gender']
Traceback (most recent call last):
  File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3267, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-24-88f3c9918f9f>", line 1, in <module>
    dict7['gender']
KeyError: 'gender'
dict7.get('gender','null')
Out[25]: 'null'
dict7.get('name')
Out[26]: '克莱汤普森'

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

集合的定义

集合不支持索引操作,集合本身是无序的,和列表、元组、字符串不一样
集合中的元素都是不重复的
对集合使用索引会报错
空集合用set()表示

s = {1,2,3}
s[0]
Traceback (most recent call last):
  File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3267, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-28-c9c96910e542>", line 1, in <module>
    s[0]
TypeError: 'set' object does not support indexing

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

如果需要对集合中的元素排序,可以使用sorted(set),返回的是一个排好序的列表

s = {30,23,11}
s_list = sorted(s)
s_list
Out[32]: [11, 23, 30]

  • 1
  • 2
  • 3
  • 4
  • 5
集合中元素的增、删、改、查

set.add(value)
将元素添加到集合的过程中,如果该元素已存在,则不进行添加操作

s
Out[33]: {11, 23, 30}
s.add(35)
s
Out[35]: {11, 23, 30, 35}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

pop()
因为集合是随机的,pop()是删除最后一位的元素,所以每次删除都不确定要删除的元素,要谨慎使用

s
Out[39]: {11, 23, 30}
s.pop()
Out[40]: 11
s
Out[41]: {23, 30}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

remove(value)
删除指定的元素,如果元素不存在会抛出异常

s = {30,11,23,35,2}
s.remove(2)
s
Out[44]: {11, 23, 30, 35}
s.remove(10)
Traceback (most recent call last):
  File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3267, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-45-23b5f1bb77c8>", line 1, in <module>
    s.remove(10)
KeyError: 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

discard()
discard()和remove()功能相同,但当元素不存在时不会报错,集合在删除元素时建议使用discard()

s = {30,11,23,35,2}
s.discard(10)
s
Out[48]: {2, 11, 23, 30, 35}

  • 1
  • 2
  • 3
  • 4
  • 5

update(seq)
将一个可迭代对象中的元素添加到集合中,可迭代对象:字符串(str),列表(list),元组(tuple),字典(dict)…

s1 = [13,77,34]
s.update(s1)
s
Out[51]: {2, 11, 13, 23, 30, 34, 35, 77}

  • 1
  • 2
  • 3
  • 4
  • 5

总结:字典和集合的基本操作以及两者各自的特性,比如集合中元素的不可重复性、字典中的key必须时不可变数据类型等等。字典和集合在python中性能极高的两种数据结构,两者在查找、添加(插入)、删除操作上的效率比起列表要好很多,在编写代码的时候选择合适的数据结构,代码的运行速度会有很大的提高。

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

闽ICP备14008679号