day3字典
""" 通过两个列表获取人对应的分数,比较麻烦,所以引出了字典 """ names = ['Alice', 'Bob', 'Candy', 'David', 'Ellena'] scores = [45, 60, 75, 86, 49] index = 0 for name in names: score = scores[index] print('{}的分数为{}'.format(name, score)) index += 1 """ 打印结果: Alice的分数为45 Bob的分数为60 Candy的分数为75 David的分数为86 Ellena的分数为49 """ # enumerate方法,打印key和value for k, v in enumerate(names): print(k, v) """ 打印结果: 0 Alice 1 Bob 2 Candy 3 David 4 Ellena """ """ 定义一个空dict """ d = dict() d1 = {} print(d, d1) """ 练习: 新来的Gaven同学成绩是86,请编写一个dict,把Gaven同学的成绩也加进去。 """ d = { 'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49 } d['Gaven'] = 86 print(d) # {'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49, 'Gaven': 86} """ 通过key返回value的值,若key不存在会报错 """ print(d['Alice']) # 45 # print(d['Dolt']) # KeyError: 'Dolt' # 先判断key存不存在,以避免错误 # 方法一: if 'Alice' in d: print(d['Alice']) else: print('Alice not in d') # 方法二:dict本身提供get方法,把key当作参数传递给get方法,就可以获取对应的value,当key不存在时,也不会报错,而是返回None print(d.get('Alice')) # 45 print(d.get('Dolt')) # None """ 字典中新增、修改元素:d['Bob'] = 75 赋值语句其实有两个功能: 1、当key不存在时,往dict中添加对应的key: value元素。 2、当key存在时,会更新dict,用新的value替换原来的value。 """ d = { 'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49 } d['Mimi'] = 72 print(d) d['Dodo'] = [72, 73] print(d) d['Dodo'].append(75) print(d) """ 打印结果: {'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49, 'Mimi': 72} {'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49, 'Mimi': 72, 'Dodo': [72, 73]} {'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49, 'Mimi': 72, 'Dodo': [72, 73, 75]} """ """ 练习: 已有同学的某次成绩dict如下: d = { 'Alice': [45], 'Bob': [60], 'Candy': [75] } Alice、Bob、Candy的最近三次的成绩分别是[50, 61, 66],[80, 61, 66],[88, 75, 90],请更新dict,使得dict可以保存同学多次的成绩。 """ d1 = { 'Alice': [45], 'Bob': [60], 'Candy': [75] } d1['Alice'].append(50) # append只能单个元素新增 d1['Alice'].append(61) d1['Alice'].append(66) print(d1) d1['Bob'].extend([80, 61, 66]) # extend可以合并两个列表 d1['Candy'].extend([88, 75, 90]) print(d1) """ 打印结果: {'Alice': [45, 50, 61, 66], 'Bob': [60], 'Candy': [75]} {'Alice': [45, 50, 61, 66], 'Bob': [60, 80, 61, 66], 'Candy': [75, 88, 75, 90]} """ """ 字典中删除元素:dict提供便捷的pop()方法,允许我们快速删除元素,pop()方法需要指定需要删除的元素的key,并返回对应的value。 """ d = { 'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49 } alice_score = d.pop('Alice') print(alice_score) print(d) """ 在dict中,使用keys()方法,可以返回dict的所有key,在删除某个元素时,可以通过这个方法先判断某个元素是否存在, 请改造前面的程序,使得即使key不存在时,删除也不会抛异常 """ name = 'Alice' if name in d.keys(): d.pop(name) else: print('{} not in keys'.format(name)) """ dict的特点: 1、查找速度快:无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。 2、dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。 3、key不可变:key可用字符串、数字、tuple,定义其他可变类型时会报错 4、dict是按 key 查找,所以,在一个dict中,key不能重复 5、python3.6版本之后,dict打印的顺序和定义的顺序一致了。但为了避免不必要的误解,一般在需要有序的dict时,我们会使用一种叫做Ordereddict的字典,来确保有序 """ d = {} d[(1, 2, 3)] = True print(d) # {(1, 2, 3): True} # d[[1, 2, 3]] = False # print(d) # TypeError: unhashable type: 'list' # 这个错误通常意味着你试图将一个list对象用作哈希参数(hash argument),有以下两种典型(常见)的情况: # (1) 用作字典的键值 # (2) 用作集合set的元素 # key不能重复 d1 = {'zoey': 75, 'cibo': 120, 'cibo': 100} print(d1) # {'zoey': 75, 'cibo': 100} """ 遍历dict: 1、第一种是遍历dict的所有key,并通过key获得对应的value。 2、通过dict提供的items()方法,items()方法会返回dict中所有的元素,每个元素包含key和value。 """ d = { 'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49 } for key in d: if d[key] > 60: print(key, d[key]) for k, v in d.items(): if v > 60: print(k, v) """ 打印结果: Candy 75 David 86 """ """ 练习: 同学的近三次成绩如下,请把每个同学的每次成绩依次输出。 d = {'Alice': [50, 61, 66], 'Bob': [80, 61, 66], 'Candy': [88, 75, 90]} """ d = {'Alice': [50, 61, 66], 'Bob': [80, 61, 66], 'Candy': [88, 75, 90]} for k,v in d.items(): for score in v: print(k, score) """ 打印结果: Alice 50 Alice 61 Alice 66 Bob 80 Bob 61 Bob 66 Candy 88 Candy 75 Candy 90 """ """ dict的其他方法: 1、获取dict的所有key:d.keys() 2、获取dict所有的value:d.values() 3、清除所有元素:d.clear() """ d = {'Alice': [50, 61, 66], 'Bob': [80, 61, 66], 'Candy': [88, 75, 90]} for key in d.keys(): print(key) """ 打印结果: Alice Bob Candy """ for value in d.values(): print(value) """ 打印结果: [50, 61, 66] [80, 61, 66] [88, 75, 90] """ d.clear() print(d) # {} """ 练习: 已知d = {'Alice': [50, 61, 66], 'Bob': [80, 61, 66], 'Candy': [88, 75, 90]},请输出d的元素个数。 """ d = {'Alice': [50, 61, 66], 'Bob': [80, 61, 66], 'Candy': [88, 75, 90]} keys = d.keys() print(keys) print(len(keys)) # 3