python的dict 和set

一、dict
dict是python内置的字典,使用key-val存储,在其他语言中 也叫map,具有极快的查找速度,不会随着数据量的变大而变慢(list就会随着长度变长,耗时变长)
先看看dict的使用
1、用法
>>> d = {'李双双':'女','张cc':'男'}
>>> d
>>> {'张cc': '男', '李双双': '女'}
2、看了dict,那为什么dict的速度会那么快呢?

1)dict的底层实现
dict的底层实现是哈希表(hash tables),通过关键值对(key-val) 而直接进行访问数据。它通过把 key 和value 映射到表中的一个位置来进行访问,这种结构查询快,更新也非常快。在对key进行 hash的时候,如果遇到相同的hash值,也就是哈希冲突,如何解决呢?一般的做法有两种,一种是链接法,一种是开发寻址法。python选择后者。
开放寻址法:所有的元素都存放在散列表里,当产生哈希冲突时,通过一个探测函数计算出下一个候选位置,如果下一个获选位置还是有冲突,那么不断通过探测函数往下找,直到找个一个空槽来存放待插入元素
2)list的底层实现
假设字典包含了1万个汉字,
我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我
们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查
找越慢。

第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页
码,然后直接翻到该页,找到这个字。无论找哪个字,这种查找速度
都非常快,不会随着字典大小的增加而变慢。
dict就是第二种实现方式
3、访问元素
>>> d['李双双']
>>> 女
4、增加元素
>>> d['王某某'] = '女'
>>> d
>>> {'张cc': '男', '李双双': '女', '王某某': '女'}
5、修改元素
>> d['李双双'] = '男'
>>> d
>>> {'张cc': '男', '李双双': '男', '王某某': '女'}
6、 判断dict的key是否存在

1)一是通过in判断key是否存在
>>> if('李双双' in d):
>>> print('存在')
>>> 存在

  1. 通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value

    print(d.get('李双双2'))
    None

    if(not d.get('李双双2')):
    print('不存在')
    不存在

    if(not d.get('李双双2',False)):
    print('不存在')
    不存在
    7、元素的删除 使用pop(key)

    d
    {'张cc': '男', '李双双': '男', '王某某': '女'}
    d.pop('王某某')
    '女'
    d
    {'张cc': '男', '李双双': '男'}

8、和list比较的优缺点
dict
a.查找和插入的速度比较快,不会随着key的增加而变慢
b.空间使用较多,需要占用较多的内存
list
a.查找和插入的速度会随着key的增加而变慢
b.空间使用少,浪费内存少

二.set
set 就类似于一组key的无序不重复的集合
1、定义
使用set 要提供一个list作为输入集合,重复的值会被过滤掉

 >>> s = set([1,2,3,3])
 >>> s
 >>> {1, 2, 3}

2、元素的添加

 >>> s.add(4)
 >>> s
 >>> {1, 2, 3, 4}

3、元素的删除

 >>> s.remove(4)
 >>> s
 >>> {1, 2, 3}

4、set的交集
 
>>> s
>>> {1, 2, 3}
>>> n = set([2,3,4])
>>> s&n
>>> {2, 3}

5、set的并集

>>> s | n
>>> {1, 2, 3, 4}

set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容