巨蟒python全栈开发-第5天

今日大纲:

1.什么是字典

  字典是以key:value的形式来保存数据,用{}表示. 存储的是key:value

2.字典的增删改查(重点)

  (1) 添加
    dic[新key] = 值

    setdefault()
  (2)删除
    pop(key)

    del dict[key]

    popitem()

    clear()

  (3)修改
    dic[老key] = 新值
    d1.update(d2)   把d2的键值对更新到d1中
  (4)查询
    dic[key]
    get(key, 值)   #推荐用法
    setdefault(key, value)
  (5) 遍历,字典是一个可迭代对象

扫描二维码关注公众号,回复: 4307773 查看本文章

3.字典的相关操作

  (1) keys()   获取到所有的键的集合(高仿列表)
  (2) values()  获取到所有的值的集合
  (3)items()   拿到所有的键值对  元组形式

  (4)解构:

  a,b=(1,2)

  a,b=1,2

4.字典的嵌套

  字典的嵌套. 字典套字典

5.集合(非重点),核心功能:去重复

 DAY5-基本数据类型(dict&set)

本节主要内容:

1.字典的简单介绍

2.字典的增删改查及其他操作

3.字典的遍历

4.字典的嵌套

5.set集合

一.字典的简单介绍

  字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成. 在唯⼀的. 在保存的时候, 根据key来计算出⼀个内存地址. 然后将key-value保存这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须如果你搞不懂什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的, 那么可哈希就一位这不可变,这个是 这个是为了能准确的计算内存地址而规定的.

已知的可哈希(不可变)的数据类型: int, str, tuple, bool
不可哈希(可变)的数据类型: list, dict, set

语法 :
{key1: value1, key2: value2....}
注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据.

dic={}
print(type(dic)) #<class 'dict'>
(1)#查找,通过列表引入字典
lst=['周杰伦','林俊杰','蔡依林'] #lst[0]
总结:字典是自定义下标的列表

dic={'jay':'周杰伦','jj':'林俊杰','jolin':'蔡依林'}
print(dic['jay']) #查找 周杰伦
(2)修改
dic={'jay':'周杰伦','jj':'林俊杰','jolin':'蔡依林'}
dic['jay']='马化腾' #修改键jay对应的值
print(dic) #结果{'jay': '马化腾', 'jj': '林俊杰', 'jolin': '蔡依林'}
(3)应用,
在手机袋子的查找手机,通过标签寻找
'''
字典的查找效率比较高
坑: a.字典存储数据的时候是用hash值来存储的,知道hash是个NB的算法就行了
b.算法不能变(python的),数据必须是不可变的(可哈希)
算法对应相同的值,对于结果
对'键'进行运算,计算出一个值来,下次再算,下次还是这个值
'''
(4)
总结:
  列表是可变的,不可哈希的
  元组是不可变的,可哈希的
  字典的键必须是可哈希的
  print(hash(123)) #结果产生的hash值:123
  print(hash('胡辣汤'))
  print((1,2,3))
(5)
dic={'jay':'周杰伦','王力宏':['龙的传人','唯一','改变自己'],['战狼','战狼2']:'武警'}
print(dic)
结果报错:TypeError: unhashable type: 'list'
总结字典不能作为"键

dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序不是连续的. 所以不能进⾏切片⼯作. 它只能通过key来获取dict中的数据

二.字典的增删改查及其他操作

(1)
增加 dic[新键]=新值
dic[老键]=新值
dic={'意大利':'李云龙','美国':'美国往事'}
dic['日本']='东京审判' #新key表示添加
dic['韩国']='釜山行'
dic['美国']="华尔街之狼" #更新
print(dic)

增加 setdefault(难点)
总结:
  有添加的功能,如果key是存在的,不添加
  流程:判断你给的key是否在字典中存在了,如果已经存在了,则不再新增,不存在,则添加

dic={'意大利':'李云龙','美国':'美国往事'}
dic.setdefault('印度') #只有键,值显示 None
print(dic) #结果:{'意大利': '李云龙', '美国': '美国往事', '印度': None}

dic.setdefault('印度','三傻大闹宝莱坞') #即使是空值也不重新赋值
print(dic) #结果:{'意大利': '李云龙', '美国': '美国往事', '印度': None}

dic.setdefault('美国','三傻大闹宝莱坞')
print(dic) #结果:{'意大利': '李云龙', '美国': '美国往事', '印度': None}
总结:即使一用setdefault开始创建没有添加值,利用setdefault再次添加也不会更新新的值.
(2)删除 pop/popitem/del/clear
dic={'张艺谋':'红高粱','李安':'断背山','陈凯歌':'霸王别姬','郭德纲':'祖宗十九代'}
方法一
dic.pop('郭德纲') #重点 需要记住的
print(dic) #结果: {'张艺谋': '红高粱', '李安': '断背山', '陈凯歌': '霸王别姬'}
方法二
dic.popitem() #现在python3.6是删除最后一个,python3.5以前随机删除 ,在Python早期,字典的无序的
print(dic) #结果: {'张艺谋': '红高粱', '李安': '断背山'}
方法三
del dic['李安']
print(dic) #结果: {'张艺谋': '红高粱'}

dic.clear() #清空
print(dic) #结果: {}

(3)#修改 dic[新键]=新值 update
dic={'河南':'胡辣汤','开封':'灌汤包','武汉':'热干面'}
dic['河南']='烩面' #总结:老key=新值
print(dic) #{'河南': '烩面', '开封': '灌汤包', '武汉': '热干面'}

update
dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
dic2={'赵四':'宝宝'}
dic1.update(dic2)
print(dic1) #dic2把dic1更新 结果:{'赵四':'宝宝','刘能':'王晓利','王木生':'范伟'}

#有相同的键,就把原来的值更新,但是不常用

(4)#查找
# dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}

#1.直接使用key就可以拿到value
# dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
# print(dic1['赵四']) #结果:刘小光
# print(dic1['赵四四']) #KeyError: '赵四四' key不存在

#2.get(key)
dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
# print(dic1.get('刘能')) #结果:王晓利
# print(dic1.get('刘能能')) #结果:None 当key不存在返回None
# print(dic1.get('刘能能','没有这个人')) #结果:当key不存在,返回第二个参数,默认第二个参数是None

# 3.setdefault()
'''
setdefault() 第一个功能是添加(当key不存在),第二个功能是查询(根据你给的key查询)
整个执行流程:判断给的key是否存在,
如果key存在,就不执行新增流程,直接查询出这个key对应的value
如果key不存在,先执行新增操作,再使用key把对应的value查询出来
'''
#例一
# dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
# ret=dic1.setdefault('皮长山','皮校长')
# print(ret) #结果:皮校长 #先找再查
#
#例二
# dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
# ret=dic1.setdefault('王木生','宝宝')
# print(ret) #结果:范伟 #先找再查

三.字典的遍历

四.字典的嵌套

五.set集合

猜你喜欢

转载自www.cnblogs.com/studybrother/p/10046557.html