Python中Dict与Set

1.dict的赋值、访问、更新、删除

dict是key-value形式的存储结构,value值通过key来赋值、访问、更新、删除等,是一种无序的结构

1)赋值
>>> dict1 = {}
>>> dict1
{}
>>> dict2 = {'name': 'earth', 'port': 80}
>>> dict2
{'name': 'earth', 'port': 80}
>>> dict3 = dict((['x', 1], ['y', 2]))
>>> dict3
{'y': 2, 'x': 1}
>>> dict4 = {}.fromkeys(('x', 'y'), 1)
>>> dict4
{'y': 1, 'x': 1}


2)访问
>>> dict2['name']
'earth'
>>> for key in dict2:
    print 'key = %s, value = %s' % (key, dict2[key])

    
key = name, value = earth
key = port, value = 80
>>> for i in dict2.keys():
    print 'key = %s, value = %s' % (i, dict2[i])

    
key = name, value = earth
key = port, value = 80
>>> for key, value in dict2.items():
    print 'key = %s, value = %s' % (key, value)

    
key = name, value = earth
key = port, value = 80

3)更新
>>> dict2
{'name': 'earth', 'port': 80}
>>> dict2['port'] = 256
>>> dict2
{'name': 'earth', 'port': 256}
>>> dict2['service'] = 'http'
>>> dict2
{'name': 'earth', 'service': 'http', 'port': 256}
>>> dict3
{'y': 2, 'x': 1}
>>> dict2.update(dict3)
>>> dict2
{'y': 2, 'x': 1, 'name': 'earth', 'service': 'http', 'port': 256}

4)删除
>>> dict2
{'y': 2, 'x': 1, 'name': 'earth', 'service': 'http', 'port': 256}
>>> del dict2['x']
>>> dict2
{'y': 2, 'name': 'earth', 'service': 'http', 'port': 256}
>>> dict2
{'y': 2, 'name': 'earth', 'service': 'http', 'port': 256}
>>> dict2.pop('y')
2
>>> dict2
{'name': 'earth', 'service': 'http', 'port': 256}
>>> dict2.clear()
>>> dict2
{}
>>> del dict2
>>> dict2

Traceback (most recent call last):
  File "<pyshell#35>", line 1, in <module>
    dict2
NameError: name 'dict2' is not defined

2.dict的比较

比较法:cmp、<、>等
比较顺序:长度---->键---->值

3.映射类型的内建方法

dict.clear()清除dict中的所有元素
dict.fromkeys(seq, val=None)创建并返回一个新dict,以seq中的元素做键,以val值做所有键的初始值
dict.items()返回一个包含dict中key和value元组的列表
dict.keys()返回一个包含dict中key的列表
dict.values()返回一个包含dict中value的列表
dict.pop(key[, default])删除并返回key对应的value,若key不存在,返回default,引发KeyError异常
dict.update(dict2)将dict2中的key-value添加到dict


dict.get(key, default=None)返回key值对应的value值,如不存在key,返回default
>>> dict2
{'name': 'earth', 'service': 'http', 'port': 256}
>>> dict2.get('service')
'http'

dict.has_key(key)若key存在,返回True,若不存在,返回False
>>> dict2.has_key('name')
True
>>> dict2.has_key('x')
False

4.集合

集合对象是一组无序排序的可哈希的值。结合本身是无序的,因此,你不可能为结合创建索引或执行切片操作,也没有键可用来获取集合中元素的值,集合中的元素不可重复

集合分为两种:可变集合set和不可变集合frozenset

1)创建或者赋值:只能使用工厂函数set()或者frozenset()
>>> s = set('Python')
>>> s
set(['h', 'o', 'n', 'P', 't', 'y'])
>>> fs
frozenset(['H', 'e', 'l', 'o'])

2)访问
>>> 'P' in s
True
>>> 's' in s
False
>>> for i in fs:
    print i,

    
H e l o

3)更新
>>> s.add(2)
>>> s
set([2, 'h', 'o', 'n', 'P', 't', 'y'])
>>> s.add('string')
>>> s
set([2, 'string', 'h', 'o', 'n', 'P', 't', 'y'])
>>> s.update('Life')
>>> s
set([2, 'e', 'string', 'f', 'i', 'h', 'L', 'o', 'n', 'P', 't', 'y'])

4)删除
>>> s.remove('P')
>>> s
set([2, 'e', 'string', 'f', 'i', 'h', 'L', 'o', 'n', 't', 'y'])
>>> del s
>>> s

Traceback (most recent call last):
  File "<pyshell#70>", line 1, in <module>
    s
NameError: name 's' is not defined

5.集合类型操作符

1)等价:当且仅当一个集合中的成员同时也是另一个集合中的成员
>>> set1 = set('Python')
>>> set1
set(['h', 'o', 'n', 'P', 't', 'y'])
>>> set2 = set('Hello')
>>> set2
set(['H', 'e', 'l', 'o'])
>>> set3 = set('Python')
>>> set3
set(['h', 'o', 'n', 'P', 't', 'y'])
>>> set1 == set2
False
>>> set1 == set3
True

2)子集与超集:‘<’和‘<=’用来判断子集,‘>’和‘>=’用来判断超集
>>> set('Hello') < set('Hello World!')
True
>>> set('book') >= set('oo')
True

3)并集:‘|’等价于union()方法,两个集合元素的合集
>>> s = set('Python')
>>> b = set('Book')
>>> s
set(['h', 'o', 'n', 'P', 't', 'y'])
>>> b
set(['k', 'B', 'o'])
>>> s | b
set(['P', 'B', 't', 'y', 'h', 'k', 'o', 'n'])

4)交集:‘&’等价于intersection()方法,两个集合中共有的元素,同时属于两个集合
>>> s & b
set(['o'])

5)差集/相对补集:‘-’等价于difference()方法,d = s - b,d中的元素只属于s而不属于b集合的元素
>>> s - b
set(['y', 'h', 't', 'P', 'n'])

6)对称差集:‘^’等价于symmetric_difference()方法,sd = s ^ b,s中的元素只能属于s或者属于b,而不能同时属于两个集合
>>> s ^ b
set(['B', 'h', 'k', 'n', 'P', 't', 'y'])

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

推荐阅读更多精彩内容