什么是字典?什么是集合?

字典定义

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

创建字典的5种方式

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

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

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

dict2 = {
   }
dict2['name'] = 'jack'

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

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

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

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

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

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

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

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

添加元素

dict[key] = value

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

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

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

dict7 = {
   'name':'jack','age':18}
dict8 = {
   'gender':'male'}
dict7.update(dict8)

删除元素

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'
clear()

清空字典内所有的键值对

dict7 = {
   'name':'jack','age':18}
dict7.clear()
dict7
Out[12]: {
   }
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

修改元素

字典[key] = value

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

len()

获取字典中键值对的个数

dict7
Out[21]: {
   'name': '克莱汤普森', 'age': 18}
len(dict7)
Out[22]: 2
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]: '克莱汤普森'

集合的定义

集合不支持索引操作,集合本身是无序的,和列表、元组、字符串不一样
集合中的元素都是不重复的
对集合使用索引会报错
空集合用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

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

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

集合中元素的增、删、改、查

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

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

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

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

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

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

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

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

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

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

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务