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'}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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