2018-08-28 day7 字典与集合

1.字典

格式:{键值对1,键值对2,键值对3...}

  • 字典是容器类型(序列),以键值对作为元素字典里的元素都是以键值对儿的形式出现的
  • 键:值(key:value)------键值对
            一个字典类型的数据中,键(key):要唯一(即两个相同的键不能出现在同一个字典变量中),不可变的;值(value):可以不唯一,可以是任意类型的数据

1.1、申明一个字典

  • a.申明一个字典变量,若有多个相同的键,程序会自动将最后一个同名键对应的值保留作为第一个同名键对应的值,其他所有同名键的值都被覆盖
dict1={1:100,'a':97,True:'bool',(10,10):'start','a':'A'}
print(dict1)      #{1: 'bool', 'a': 'A', (10, 10): 'start'}
#键 True会自动转换成1,覆盖并替换第一个键值对
  • 与列表的区别:可以对里面的元素进行说明
person1=['王龙',18,5]
person2={'name':'王龙','年龄':18,'工龄':5}   
  • 字典中,键(key)必须是不可变的类型,不能是列表
dict1={1:100,'a':97,True:'bool',(10,10):'start',[1,2]:'a'}
 print(dict1)    #TypeError: unhashable type: 'list'
  • 申明一个空字典
a={} 

1.2 字典的增删改查

1.2.1 查(获取值)

       获取字典元素对应的值:字典存数据,实质还是存 值(value),key是获取value的手段。

方式一

  • 格式: 字典[key] -----通过key获取值(value)
 person2={'name':'王龙','age':18,'工龄':5}
 print(person2['name'],person2['age'])
  • 通过key获取值的时候,如果key不存在,会报错keyerror
person2={'name':'王龙','age':18,'工龄':5}
print(person2['sex'])  #Keyerror

方式二

  • 格式: 字典.get(key)
person2={'name':'王龙','age':18,'工龄':5}
print(person2.get('age'))
  • 如果key 不存在,不会报错,返回none

总结:

  • 确定key肯定存在的时候用字典.[key]语法获取value,
  • key值可能不存在,不存在的时候不希望报错,而是想要对呀进行特殊处理的时候用get获取value
    例:想要获取sex,如果没有就默认‘男’
person={'name':'王龙','age':18}
if person.get('sex')!=None:
    print=(person['sex'])
else:
    print('男')

1.2.2遍历字典

  • 遍历字典直接取到的是字典所有的key
    例:
dog={'name':'旺财','color':'yellow','age':3}
for key in dog:
    print(key,end=' : ')
    print(dog[key])

输出:

name : 旺财
color : yellow
age : 3

1.2.3 改(修改key对应的value)

格式: 字典[key]=新值

  • key本来就在字典中存在,就是修改
    说明:字典中只有这一种语法

1.2.4 增加(增加字典中的键值对)

格式: 字典[key]=值

  • key本来就在字典中不存在,就是增加
  • 字典的改与增加的格式一样,关键在于key在原字典中是否存在

例:

dog={'name':'旺财','color':'yellow','age':3}
dog['name']='大黄'   
print(dog)  #{'name': '大黄', 'color': 'yellow', 'age': 3}
dog['type']='藏獒'
print(dog)   #{'name': '大黄', 'color': 'yellow', 'age': 3, 'type': '藏獒'}

1.2.5删(删除键值对)

  • 格式一    del 字典[key]
    直接删除
dog={'name':'旺财','color':'yellow','age':3}
del dog['age']
print(dog)  #{'name': '旺财', 'color': 'yellow'}
  • 格式一    字典.pop(key)
    将key对应的键值对取除,并将对应的值保存起来
# dog={'name':'旺财','color':'yellow','age':3}
# color=dog.pop('color')
# print(dog,color,type(color),sep=',')   #{'name': '旺财', 'age': 3},yellow,<class 'str'>

2. 字典的相关运算

2.1 字典不支持 '+'和 '*'

2.2 支持 in 和 not in: 判断key是否存在

 computer={'brand':'联想','color':'black'}
 print('color'in computer)   #True

2.3 len() 指的是有多少对键值对

# computer={'brand':'联想','color':'black'}
# print(len(computer))  #2

2.4方法

2.4.1 字典.clear()

  • 删除字典中所有键值对

2.4.2 字典.copy()

  • 拷贝字典中所有的元素,并放在一个新的字典中
dict1={'a':1,'b':2}
dict2=dict1  #将dict1的地址赋给dict2,两个变量指向同一块内存空间
dict3=dict1.copy()   #将dict1的值拷贝到一个新的内存区域,再将新的
                     #地址赋给dict3
dict1['a']=100
print(dict2)     #{'a': 100, 'b': 2}
print(dict3)    ##{'a': 1, 'b': 2}

2.4.3 dict.fromkeys(序列,默认值=None)

  • 将序列中的每个值作为key,默认值为value新建字典
  • 创建一个新得字典,注意默认值可以不写,写的话只能写一个数据
print(dict.fromkeys('abc',0))  #{'a': 0, 'b': 0, 'c': 0}

2.4.5 字典.key()

  • 获取字典中所有的key,以列表的形式保存
dict1={'a':1,'b'=2}
all_key=dict1.keys()
print(all_key)     #dict_keys(['a', 'b'])

2.4.5 字典.value()

  • 获取字典中所有的value

2.4.6 字典.items()

dict1={'a':1,'b':2}
print(dict1.items())   #dict_items([('a', 1), ('b', 2)])
for key,value in dict1.items()
    print(key,value)    #a 1
                        #b 2
  • 以上方式不推荐使用,会大量消耗cup的资源,影响软件性能

2.4.7 字典.setdefault(key,默认值=None)

  • 给字典添加键值对,如果key已存在,就不产生影响
dict1={'a':1,'b':2}
dict1.setdefault('ab','abc')
dict1.setdefault('aa')
print(dict1)   #{'a': 1, 'b': 2, 'ab': 'abc', 'aa': None}

2.4.8 字典1.update(字典2)

  • 将字典2中的键值对更新到字典2中
  • 更新方式:如果字典2 中的key在字典2中是存在的,就用字典2中的值更新字典1中的值,不存在就添加到字典1中
dict1={'a':1,'b':2,'c':3}
dict1.update({'a':100,'d':27})
print(dict1)   #{'a': 100, 'b': 2, 'c': 3, 'd': 27}

3.字典与列表

什么时候使用列表,什么时候用字典

  • 保存的多个数据的类型是一个类型的用列表
  • 保存的多个数据的类型是多个类型时就用字典

4.集合

  • 集合是python中的一种容器类型;无序的,可变的,值唯一
  • 集合的内容;除了容器类型的数据,其他基本都行(数字,布尔,字符串),和字典的key的要求一样

4.1.声明一个集合

set_1={1,'abc',100,100}     #值唯一
print(set_1,type(set_1))      #{'abc', 1, 100} <class 'set'>

4.2 将其他序列转换成集合

str_1='abscbcsaaaa'
set_2=set(str_1)    #将其他序列转换成集合,自带一个去重的功能
print(set_2)   #{'s', 'c', 'b', 'a'}

4.3 集合的增删改查

4.3.1查(获取集合的元素)

  • 集合是不能单独获取其中的某一个元素的 只能通过for循环取遍历
set_1={1,'abc',100,100}
for item in set_1:
    print(item)

输出:

1
abc
100

4.3.2 增(添加元素)

集合.add(元素)

set_1={1,'abc',100}
set_1.add('good')
print(set_1)     #{1, 'good', 100, 'abc'}

集合.update(集合2)

  • 将集合2中的元素添加到集合1中
set_1={1,'abc',100}
set_1.update({5,7,6})
print(set_1)     #{1, 100, 5, 6, 7, 'abc'}

4.3.3删

集合.remove(元素)

set_1={1,'abc',100}
set_1.remove('abc')
print(set_1)     #{1, 100}

集合.clear()

  • 删除所有元素

4.4 改(改不了)

5.数学相关的集合运算

5.1判断包含情况

  • 集合1>=集合2 : 判断集合1是否包含集合2
  • 集合1<=集合2 :判断集合2中是否包含集合1
print({1,2,3,4,1,5,6,7}>={1,2,3})  #True

5.2求并集 |

set_1={1,2,3,4,5,9,34}
set_2={3,232,37,4,9,6,34}
print(set_1 | set_2)    #{1, 2, 3, 4, 5, 34, 37, 6, 9, 232}

5.3求交集: &

set_1={1,2,3}
set_2={3,4,5}
set_3={4,5,6}
print(set_1&set_2 , set_1&set_3)   #{3} set()

5.4求差集 -

5.5求补集 ^

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

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,094评论 1 32
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,142评论 0 13
  • 歌曲:唱给自己的歌 作词 : 越阳 没能变化的时候 我的路我最先懂 我知道我该做什么 知道结果 痛苦要持续多久 等...
    吉他乌托邦阅读 552评论 0 1
  • 2018年目标:1.瘦到90斤 2.有个男朋友 3.升职加薪
    小油漆阅读 115评论 0 0