字典基础
#
# 主题:字典基础
#
if __name__ == '__main__':
# 字典是一种 python 数据结构
# 字典以键值对(key: value)的方式存储数据,字典是一个无序的序列(排列有前后顺序)
# 列表是无序序列,排列无先后顺序
# 相当于 JavaScript 中的对象
# 字典通过 hash 函数和键值对中的键,计算出存储位置,之后才能找到对应的值
# 键值对的键时不可变序列(不能进行增删改查),如字符串、整数等
# 字典和列表都是可变序列,都可以进行增删改查
创建字典
#
# 主题:创建字典
#
if __name__ == '__main__':
# 使用花括号
scores = {'Bob': 100, 'Jenny': 90, 'Danny': 80}
print(scores) # {'Bob': 100, 'Jenny': 90, 'Danny': 80}
print(type(scores)) # <class 'dict'>
# 使用内置函数 dict
student = dict(name = 'Liming', age = 20)
print(student) # {'name': 'Liming', 'age': 20}
# 空字典
d = {}
获取字典的元素
#
# 主题:获取字典的元素
#
if __name__ == '__main__':
scores = {'Bob': 100, 'Jenny': 90, 'Danny': 80}
# 使用 []
print(scores['Danny']) # 80
# 若键在原字典中不存在,则报错 KeyError,既无法找到对应的键
# 使用 get 方法
print(scores.get('Danny')) # 80
# 若键在原字典中不存在,则 get 方法返回默认值 None
print(scores.get('我', 0)) # 0
# 若键在原字典中不存在,则可以返回自定义返回值
字典元素的增删改
#
# 主题:字典元素的增删改
#
if __name__ == '__main__':
scores = {'Bob': 100, 'Jenny': 90, 'Danny': 80}
# 判断键是否存在于原字典中
print('我' in scores) # False
print('我' not in scores) # True
# 删除字典元素
del scores['Danny']
print(scores) # {'Bob': 100, 'Jenny': 90}
scores.clear() # 清空字典
print(scores) # {} 即空字典
# 添加字典元素
scores['我'] = 100
print(scores) # {'我': 100}
scores['me'] = 99
print(scores) # {'我': 100, 'me': 99}
# 改写字典元素
scores['我'] = 98
print(scores) # {'我': 98, 'me': 99}
获取字典视图
#
# 主题:获取字典视图
#
if __name__ == '__main__':
scores = {'Bob': 100, 'Jenny': 90, 'Danny': 80}
# keys 方法获取字典中所有的 key
keys = scores.keys()
print(keys) # dict_keys(['Bob', 'Jenny', 'Danny'])
print(type(keys)) # <class 'dict_keys'>
print(list(keys)) # ['Bob', 'Jenny', 'Danny']
# 将所有 key 组成的视图转换为列表
# values 方法获取字典中所有 value
values = scores.values()
print(values) # dict_values([100, 90, 80])
print(type(values)) # <class 'dict_values'>
print(list(values)) # [100, 90, 80]
# items 方法获取字典中所有 key: value 对
# 下面的输出结果中的小括号是元组
items = scores.items()
print(items) # dict_items([('Bob', 100), ('Jenny', 90), ('Danny', 80)])
print(type(items)) # <class 'dict_items'>
print(list(items)) # [('Bob', 100), ('Jenny', 90), ('Danny', 80)]
遍历字典元素
#
# 主题:遍历字典元素
#
if __name__ == '__main__':
scores = {'Bob': 100, 'Jenny': 90, 'Danny': 80}
for item in scores:
print(item, scores[item], scores.get(item)) # 第一个参数控制输出键
# 第二、三个参数控制输出值
字典的特点
#
# 主题:字典的特点
#
if __name__ == '__main__':
d = {'name': 'Danny', 'name': 'Jenny'} # 当有相同的键时,后出现的键值对会覆盖掉前面的键值对
print(d) # {'name': 'Jenny'}
d = {'name': 'Smith', 'nikename': 'Smith'} # value 可以重复
print(d) # {'name': 'Smith', 'nikename': 'Smith'}
# 字典中的元素是无序的,所以无法在自定义位置处添加元素
# 键必须是不可变对象(字符串、整数),列表不能作为键(因为列表是可变对象,无法计算哈希值)
# 字典的存储空间可以根据需要动态地伸缩
# 字典会浪费较大内存,是一种使用空间换时间的数据结构
# 字典中第一个填入的数据不一定在字典的首位,因为需要根据数据的键计算哈希值,从而得到存储地址
# 字典的存储位置与存入的先后顺序无关,而与键有关
字典生成式
#
# 主题:字典生成式
#
if __name__ == '__main__':
items = ['Fruits', 'Books', 'Others']
prices = [96, 78, 85]
d = {item.upper(): price for item, price in zip(items, prices)} # upper 方法是大写
print(d) # {'FRUITS': 96, 'BOOKS': 78, 'OTHERS': 85}
# 若 items 或 prices 中元素个数不相等,则以元素个数少的那个为准建立字典