2018-08-28-字典和集合

一、字典(dict)

  • 字典是容器类型(序列),以键值对作为元素(字典里面存的数据全是以键值对的形式出现的)
    ——{key1:value1,key2:value2....}
  • 键值对:键:值(key1:value1)
    • 键(key):要唯一,不可变的(数字,布尔,字符串,元祖,推荐使用字符串)
    • 值:可以不唯一,可以任何类型数据
  • 字典是可变的,---指的是字典中的键值对的值和个数可变

1、声明字典

dict1={10:100,'a':97,True:'布尔',(10,10):'start','aa':'A'}
print(dict1)

dict2={}  #空的字典

# 可以对存储的数据进行说明
person1=['樊振霖',21,5]
person2={'name':'樊振霖','age':21,'work_age':5}

2,查(获取值)

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

2.1字典[key]---通过key来获取值
print(person2['name'])   #---樊振霖

# 通过字典[key]获取value的时候,如果key不存在,会发生keyError异常
# print(person2['sex'])---KeyError: 'sex'
2.2,字典.get(key)
print(person2.get('age'))
# 字典.get(key),如果key不存在不会报错,返回None
print(person2.get('sex'))   #None

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

想要获取性别,如果没有就默认为男
person={'name':'樊振霖','age':21,'grade':90}
if person.get('sex')!=None:
    print(person['sex'])
else:
    print('男')
2.3,遍历字典

遍历字典直接取到的是字典的所有的key值

for key in person:
    print(key,end=' ')  #  name  age  grade
    print(person[key])

3,改(修改key对应的value)

字典[key]=新值 (key本来存在)
person2['age']=25
print(person2)  #{'name': '樊振霖', 'age': 25, 'work_age': 5}

4,增(添加键值对)

字典[key]=新值 (key本来不存在)
person2['sex']='男'
print(person2)   #{'name': '樊振霖', 'age': 25, 'work_age': 5, 'sex': '男'}

5,删(删除键值对)

5.1,del 字典[key]
del person2['age']
print(person2)   #{'name': '樊振霖', 'work_age': 5, 'sex': '男'}
5.2,字典.pop(key)
sex=person2.pop('sex')
print(person2)  #{'name': '樊振霖', 'work_age': 5}

二、字典相关的运算

1,字典不支持‘+’和‘*’

2,in和not in

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,'c':3}
dict2=dict1  #将dict1的地址赋给dict2
dict3=dict1.copy()  #将dict1中的内容复制到一个新的内存区域中,然后将新的地址赋给dict3
dict1['a']=100
print(dict1)      #{'a': 100, 'b': 2, 'c': 3}
print(dict2)       #{'a': 100, 'b': 2, 'c': 3}
print(dict3)        #{'a': 1, 'b': 2, 'c': 3}

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

将序列中的每个值作为key,默认值为value创建一个新的字典。

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

7.字典.key()

获取字典中所有的key,以列表的形式返回

all_key=dict1.keys()
print(all_key)  #dict_keys(['a', 'b', 'c'])

8,字典.values()(了解)

获取字典中所有的value

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

9,字典.item():遍历各个键值对

print(dict1.items())  #dict_items([('a', 100), ('b', 2), ('c', 3)])
这种方式不推荐使用
for key,value in dict1.items():
    print(key,value,end=';')  #a 100;b 2;c 3

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

给字典添加键值对。如果key本身就存在,不做任何操作

dict1.setdefault('d')
print(dict1)         #{'a': 100, 'b': 2, 'c': 3, 'd': None}
dict1.setdefault('d',100)
print(dict1)         #{'a': 100, 'b': 2, 'c': 3, 'd': None}

11,字典.update(字典2)

将字典2中的键值对更新到字典一中
更新方式:如果字典2的key,在字典1中是存在的,就用字典2中的值去更新字典1中的值,不存在就添加到字典1中

dict1={'a':'a','b':'b','c':'c','d':'d'}
dict1.update({'d':'e','e':'e'})
print(dict1)  #{'a': 'a', 'b': 'b', 'c': 'c', 'd': 'e', 'e': 'e'}

三、字典和列表的组合使用

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

    • 保存的多个数据的类型不同,用字典
      例如:声明一个变量保存一个学生的信息

student_system=[
    {'name':'stu1','age':18,'tel':1100,'native_place':'四川.成都'},
    {'name':'stu2','age':18,'tel':1120,'native_place':'四川.成都'}
]
# 取出第一个学生的籍贯
print(student_system[0]['native_place'])  #四川.成都

# 字典中有列表
py_class={
    'class_name':'python1806',
    'student':[
       {'name':'stu1','age':18,'tel':1100,'native_place':'四川.成都'},
       {'name':'stu2','age':18,'tel':1120,'native_place':'四川.成都'}
    ]
}

# 取班级名
print(py_class['class_name'])  #python1806
# 去第二个学生名字
print(py_class['student'][1]['name'])  #stu2

练习,在班级中添加一个学生

name=input('请输入学生姓名:')
age=int(input('请输入学生年龄:'))
id=input('请输入学生id:')

# 一个学生对应一个字典
student={'name':name,'age':age,'id':id}

# 将学生对应的字典添加到学生列表中
py_class['studet'].append(student)
print(py_class)

输入一个学生的姓名,删除对应的学生

name=input('请输入学生姓名:')
all_student=py_class['student']

for x in all_student[:]:
    if x['name']==name:
        all_student.remove(x)
print(py_class)
name=input('请输入学生姓名:')
all_student=py_class['student']
length=len(all_student)

for x in range(0,lenth+1):
    if all_student[x]['name']==name:
        all_student.pop(x)
        break
print(py_class)

四、集合(set)

  • 集合是python中一种容器类型;无序的,可变的,值唯一
  • 和数学中集合相似
  • 除了可变的类型,其他的基本都行,数字、布尔和字符串(和字典的key要求一样)
  • 字典可以转换成集合,但只有key值

1,声明一个集合

set1={1,'abc',}
print(set1,type(set1))  #{1, 'abc'} <class 'set'>
  • 将其他的序列转换成集合,自带去重功能
set2=set('abcdsabdes')
print(set2)

set3={10,1.1,True,'abc'}
print(set3)

2.查(获取集合中某个元素)

  • 集合是不能单独获取某一个元素
  • 遍历获取每一个元素
for item in set3:
    print(item)

3,增(添加元素)

3.1,集合.add(元素)
set3.add('good')
print(set3)
3.2,集合1.update(集合2):将集合2中元素,添加到集合1中
set3.update(set1)
print(set3)

4,删

集合.remove(元素)
set3.remove('abc')
print(set3)
set.clear();删除所有元素
set3.clear()
print(set3)  #set()

5,改,无法改

6.数学相关的集合运算

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,566评论 18 139
  • 最近雪糕有很多自主的行为了。 前天我正在放水给她洗澡,忽然一个玩具从我身边飞过,丢进了洗澡盆,一回头,雪糕就在盆边...
    文两文阅读 123评论 0 0
  • 今天是“六.一”儿童节,首先在此祝愿全国的小朋友节日快乐!健康成长。 今天早上班主任让孩子们6:...
    牛子仪阅读 235评论 0 0
  • 《就输在「周而复始」的「思想禁锢」里》 时间:2017年6月26日星期一【能量世界1027天】 记录者:耿鲲鹏 我...
    耿鲲鹏先生阅读 547评论 8 8
  • 一门课怎么学知识?学会知识 出现问题,目标清楚 做一件事情,怎么做,怎么规划。(你现在不就是在做一个APP吗,你规...
    139亿阅读 88评论 0 0