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

 

posted @ 2023-03-04 23:45  雪儿来  阅读(15)  评论(0编辑  收藏  举报