2018-08-28字典与集合(day7)

一、字典

定义:
1.字典是容器类型(序列),以键值对作为元素(字典里面存的数据全是以键值对的形式出现的)
形式:{key1:value,key2:value2.....}
2.键值对: 键:值(key:value)
键(key):要唯一,不可变的(数据类型,布尔,字符串和元祖;推荐使用字符串)
值(value):可以不唯一,可以是任何类型的数据
3.字典是可变(增删改) ---> 指的是字典中的键值对的值和个数可变
4.{}(空列表也是列表)
基本操作
1.声明变量

dict1 = {4:2,'a':5,True:'布尔',(10,12):'start'}
print(dict1)
结果:{4: 2, 'a': 5, True: '布尔', (10, 12): 'start'}

person1 = ['魏世强',23,'男']
person2 = {'name':'魏世强','age':23,'sex':'男'}
print(person1,person2)
结果:['魏世强', 23, '男'] {'name': '魏世强', 'age': 23, 'sex': '男'}

dict3 = {}
print(type(dict3))
<class 'dict'>

2.查(获取值)
定义:
获取字典的元素对应的值(字典存数据,实质存的是value,key是获取value的手段)
a.字典[key] ---> 通过key来获取值
通过字典[key]获取value的时候,如果key不存在会发生keyerror异常

person1 = {'name':'魏世强','age':23,'sex':'男'}
print(person1['name'],person1['age'])
魏世强 23

b.字典.get(key)
字典.get(key),如果key不存在不会报错,返回None

print(person1.get('age'))
23
print(person1.get('height'))
None -- python中的特殊值,代表没有

总结:确定key肯定存在的时候用[ ]语法获取value。key值可能不存在,不存的时候不希望报错, 而是想要自己对它进行特殊处理的时候使用get获取value

练习:存储一个人的信息,如果没有性别就默认为男

person1 = {'name':'魏世强','age':23,'sex':'男'}
if person1.get('sex') != None :
    print(person1['sex'])
else:
    print('男')

c.遍历字典(遍历字典直接渠道是字典的所有的key值)

person1 = {'name':'魏世强','age':23,'sex':'男'}
for key in person1:
    print(key)  name age sex
    print(person1[key])  魏世强 23 男

3.改(修改key对应的value)
字典[ key ] = 新值

person1['name'] = '李涵'
print(person1)
{'name': '李涵', 'age': 23, 'sex': '男'}

4.增(添加键值对)
字典[ key ] = 值 (key本来不存在)

person1['weight'] = '80kg'
print(person1)
{'name': '李涵', 'age': 23, 'sex': '男','weight':'80kg'}

5.删(删除键值对)
a.del 字典[ key ]
b.字典.pop(key)

del person1['weight']
print(person1)
{'name': '李涵', 'age': 23, 'sex': '男'}

age1 = person1.pop('age')
person2 = {'age':age1}
print(person2,person1)
{'age': 23}     {'name': '魏世强', 'sex': '男'}

二、字典相关的运算

1.字典不支持' + '和' * '

dict1 = {'a':10,'b':20} + {'c':30}  #TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
print(dict1)

2.in 和 not in :判断key是否存在

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

3.len()

print(len(computer))    2

4.字典.clear()
删除字典中所有的元素(键值对)

computer.clear()
print(computer)   
{ }

5.字典.copy()

dict1 = {'a':1,'b':2}
dict2 = dict1  #将dict中的地址赋给dict2,两个变量指向同一块内存区域
dict3 = dict1.copy()  #将dict1中的内存复制到一个新的内存区域中,然后将新的地址给dict3
dict1['a'] = 100
print(dict2)  # {'a': 100, 'b': 2}
print(dict3)  # {'a': 1, 'b': 2}

6.dict,fromkey(序列,默认值 = None)
将序列中的每一个值作为key,默认值为value创建一个新的字典
注意:默认值可以不写,但最多只能写一个值(类型不限)

print(dict.fromkeys('abcd',12)) # {'a': 12, 'b': 12, 'c': 12, 'd': 12}
print(dict.fromkeys(['name','age','sex'],[1,2])) # {'name': [1, 2], 'age': [1, 2], 'sex': [1, 2]}

7.字典.keys()
获取字典中所有的key,以列表的形式返回

dict1 = {'a':1,'b':2}
all_key = dict1.keys()
for key in all_key:
    print(key)   # a b

8.字典.values
获取字典中所有的value

all_value = dict1.values()
print(all_value)  # dict_values([1, 2])

9.字典.items()

print(dict1.items())  #dict_items([('a', 1), ('b', 2)])
for key,value in dict1.items():
    print(key,value)   # a 1  b 2

10.字典.setdefault(key,默认值 = None)
给字典添加键值对。如果本身就存在,这个方法无作为

dict1 = {'a':1,'b':2}
dict1.setdefault('a','cc')
dict1.setdefault('dd')
print(dict1)  # {'a': 1, 'b': 2, 'dd': None}

11.字典1.updata(字典2)
a.将字典2中的键值对更新到字典1中
b.更新方式:如果字典2的key,在字典1中是存在的,就字典2中的值去更新字典1中的值。不存在就添加到字典1中

dict1 = {'abc': 'a','ada':'b'}
dict1.update({'abc':1,'dada':3131})
print(dict1) # {'abc': 1, 'ada': 'b', 'dada': 3131}

三、字典和列表的组合

什么时候使用列表? 什么时候使用字典?
1.保存的多个数据是同一类型的时候,用列表
列如:声明一个变量保存所有的数学成绩,声明一个变量保存所有的学生信息
2.保存的多个数据的类型不同,就要字典
声明一个变量保存一个学生的信息

1.列表中有字典
student_system = [
    {'name':'no1','age':18,'sex':'男','tel':119},
    {'name':'no2','age':18,'sex':'女','tel':120}
]
# 取出第一个学生的电话
print(student_system[0]['tel'])  # 119
2.字典中有列表
py_class = {'class_name': 'python1806',
            'student':[
                {'name' :'小明','age':18,'num':'001'},
                {'name':'小红','age':19,'num':'002'},
                {'name':'小刚','age':20,'num':'003'}
            ]
            }

del_name = input('请输入你的名字:')
all_student = py_class['student']

for student_dict in all_student[:]:
    if student_dict['name'] == del_name:
        all_student.remove(student_dict)
print(py_class)
请输入你的名字:小红
{'class_name': 'python1806', 'student': [{'name': '小明', 'age': 18, 'num': '001'}, {'name': '小刚', 'age': 20, 'num': '003'}]}

四、集合

集合(set)
定义:
a.集合是python中一种容器类型;无序的,可变的,值唯一
b.和数学中的集合差不多
c.除了可变容器类型,其他的基本都行,数字、布尔、和字符串是可以的
1.声明一个变量
将其他的序列转换成集合,自带一个去重的功能

set1 = {1,'abc',10,100,1}
print(set1,type(set1))
{100, 1, 10, 'abc'}  <class 'set'>

2.查(获取集合中元素)
a.集合是不能单独获取其中的某一种元素的
b.遍历获取每一个元素

for item in set1:
    print(item)   #100  1 10 abc

3.增(添加元素)
a.集合.add(元素)
b.集合1.update(集合2):将集合2中的元素,添加到集合1中

set1.add('sadad')
print(set1)  # {1, 100, 10, 'sadad', 'abc'}
set1.update({1,2,3,325})
print(set1)  # {1, 2, 3, 100, 325, 10, 'sadad', 'abc'}

4.删
a.集合.remove(元素)
b.集合.clear() 删除所有的元素

set1.remove('abc')
print(set1) # {1, 2, 3, 100, 325, 10, 'dafagsg'}
set1.clear()
print(set1)  # set()

5.改(改不了)
6.数学相关的集合运算
a.判断包含的情况(判断值为布尔)

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

b.求并集: |

set1 = {1,2,3,4,5,6,}
set2 = {1,2,3,14,15,16}
print(set1 | set2) # {1, 2, 3, 4, 5, 6, 14, 15, 16}

c.求交集 :&

print(set1 & set2) # {1, 2, 3}

d.求差集: -

print(set2 - set1) # {16, 14, 15}

e.求补集: ^
求两个集合中除了公共部分以外的部分

print(set1 ^ set2) # {16, 4, 5, 6, 14, 15}

f. 字典转换为集合
注意:字典转换为集合后,集合只有存储字典的键并且无序。

dict1 = {'name':'魏世强','age':23}
set1 = set(dict1)
print(set1) # {'age', 'name'}

g.列表转换为集合
注意:列表转换为集合后,集合会存储列表所有的值并且无序

list1 = [1,2,'abc']
set1 = set(list1)
print(set1) #{1, 2, 'abc'}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容

  • 一、快捷键 ctr+b 执行ctr+/ 单行注释ctr+c ...
    o_8319阅读 5,801评论 2 16
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,941评论 17 410
  • 今天真是比较丰富啊!扫地机器人又有了深刻的了解吸豆子拖地 ,内部结构与其他机器的区别。 马桶盖为了人体的健康,老人...
    冬冬_904b阅读 368评论 0 0
  • 在第一天,我制做了作息时间表。 在第二天,我差一点点就违返了作息时间表,幸亏有爷爷奶奶提醒我,要不就违返了作息时间...
    赵贝阅读 175评论 0 2
  • 不知道是什么时候开始,叫醒我的不是闹钟,而是一个推送消息的声音。 和大多数你所关注的app一样,简书也会给你所关注...
    奕彭阅读 291评论 1 2