前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python】6“dict和set“

【Python】6“dict和set“

作者头像
肓己
发布2021-08-12 10:24:32
2650
发布2021-08-12 10:24:32
举报
文章被收录于专栏:linux commands

dict

在Python中内置有字典dict,是以键值对的形式存储,在Java中有map,在Objective-C中也称为dict。

  • 使用方法
代码语言:javascript
复制
>>>  gather = {'张三':78,'李四':59,'王五':98}
>>>  print(gather['张三'])
78
  • 通过key更改value的值
代码语言:javascript
复制
>>>  gather = {'张三':78,'李四':59,'王五':98}
>>>  print(gather['张三'])
>>>  gather['张三'] = 88
>>>  print(gather['张三'])
78
88
  • key不存在的情况

如果key值不存在,那么会报错,我们可以用in检查key是否存在存在dict中

代码语言:javascript
复制
>>>  '赵六'  in  gather
>>>  '张三'  in  gather
false
true

还可以使用dict提供的get方法检查key是否存在存在dict中,如果存在就返回key对应的value值,如果没有,可以返回自己指定的值

代码语言:javascript
复制
>>> gather.get('张三')
78
>>> gather.get('赵六','没有')
'没有'
  • 删除key
代码语言:javascript
复制
>>> gather = {'张三':78,'李四':59,'王五':98}
>>> print(gather)
{'张三': 78, '李四': 59, '王五': 98}
>>> gather.pop('张三')
78
>>> print(gather)
{'李四': 59, '王五': 98}
  • list和dict的区别

教程中提到list和dict一些特点上区别

和list比较,dict有以下几个特点: 查找和插入的速度极快,不会随着key的增加而变慢; 需要占用大量的内存,内存浪费多。 而list相反: 查找和插入的时间随着元素的增加而增加; 占用空间小,浪费内存很少。 所以,dict是用空间来换取时间的一种方法。

set

set的特点是有序的、无重复的,set与dict不同,set是没有value的

  • 使用方法
代码语言:javascript
复制
>>> s = set([1,2,3,4,5,3,5,6,4,7])
>>> s
{1, 2, 3, 4, 5, 6, 7}
  • 添加元素 需要注意,如果添加set中已有的vlaue,是不会有效果的,因为set的特点就是无重复
代码语言:javascript
复制
>>> s1.add(1)
>>> s1
{1, 2, 3, 4, 5}
  • 删除元素
代码语言:javascript
复制
>>> s1.remove(1)
>>> s1
{2, 3, 4, 5}
  • 数学意义 set可以看作数学意义上的集合,可以作交集、并集运算
代码语言:javascript
复制
>>> s1 = set([1,2,3,4,5])
>>> s2 = set([4,5,6,7,8])
>>> s1 & s2
{4, 5}
>>> s1 | s2
{1, 2, 3, 4, 5, 6, 7, 8}

dict与set的区别

set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。

再议不可变对象

str是不可变对象,而list是可变对象。 先说list,对list进行操作时,能对list内部的内容作出改变,所以list被称为可变对象,比如:

代码语言:javascript
复制
>>> list = ['c','b','a']
>>> list.sort()
>>> list
['a', 'b', 'c']
>>> list
['a', 'b', 'c']

对list进行排序操作后,list的内容就发生改变。

再说str,它是一个不可变对象:

代码语言:javascript
复制
>>> str = 'nba'
>>> str.replace('a','A')
'nbA'
>>> str
'nba'

对str进行操作后,发现str并未发生改变。

我们可以来解释一下其中的原因:

△ 变量str指向对象’nba’,当对str进行操作时,实际上也是对’nba’进行操作,但实际上并未对str所指向的’nba’进行操作,而是生成了一个新的对象’nbA’,这里我们没有使用变量指向这个’nbA’。

△ 所以str的值,还是’nba’,如果需要这个新对象’nbA’,则需要一个新的变量来接收它:

代码语言:javascript
复制
>>> str = 'nba'
>>> str.replace('a','A')
'nbA'
>>> str
'nba'
>>> str1 = str.replace('a','A')
>>> str
'nba'
>>> str1
'nbA'
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/06/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • dict
  • set
  • dict与set的区别
  • 再议不可变对象
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档