Pyhton基础学习系列11——字典

2023-12-28 20:22:06


一、认识字典

  1. 字典(dictionary)是除列表之外python之中最灵活的内置数据结构类型
  2. 列表是有序的,字典是无序的,列表通过索引下标来进行增删改查,而字典是通过来进行增删改查。
  3. 二者区分使用的方法就是:需要同时保存多个意义不同的数据的时候就用字典;如果需要同时保存多个意义相同的数据就用列表
  4. 字典是容器型数据类型;将{}作为容器的标志,里面多个键值对用逗号隔开:{键1: 值1, 键2: 值2, …}
  5. 语法:dict(变量名) = {key1 : value1, key2 : value2 },key是键,value是值。dict 作为 Python 的关键字和内置函数,变量名不建议命名为 dict,这里只是用作于理解。
  6. 键 - 键只能是不可变类型的数据(一般是字符串);键是唯一的
  7. 值 - 可以是任何类型的数据
  8. 键值对:必须成对出现;真正想要存储的是值,键是用来对值进行区分和说明。

二、字典的使用方法

1.字典的增删改查

1.查 - 获取字典的值

  • 字典[键] - 获取字典中指定键对应的值,如果键不存在会报错
dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
print(dog['name'])
# 可乐
print(dog['gender'])
# 公
# print(dog['weight'])          # 报错! KeyError: 'weight'
  • 字典.get(键) - 获取字典中指定键对应的值,如果键不存在不会报错返回None
  • 字典.get(键, 默认值) - 获取字典中指定键对应的值,如果键不存在不会报错返回默认值
dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
print(dog.get('name'))
# 可乐
print(dog.get('weight'))
# None
print(dog.get('name', '财财'))
# 可乐
print(dog.get('weight', 10))
# 10

2.增和改

  • 字典[键] = 值 - 如果键存在就修改这个键对应的值;如果键不存在就添加键值对
dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
print(dog)
# {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
dog['name'] = '土豆'
print(dog)
# {'name': '土豆', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
dog['weight'] = 15
print(dog)
# {'name': '土豆', 'age': 3, 'breed': '哈士奇', 'gender': '公', 'weight': 15}
  • 字典.setdefault(键, 值) - 添加键值对(如果键不存在就添加键值对,如果键存在不会修改值)
dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
dog.setdefault('name', '土豆')
print(dog)
# {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
dog.setdefault('weight', 10)
print(dog)
# {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公', 'weight': 10}

3. 删 - 删除键值对

  • del 字典[键] - 删除字典中指定键对应的键值对
dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
del dog['breed']
print(dog)
# {'name': '可乐', 'age': 3, 'gender': '公'}
  • 字典.pop(键) - 取走字典中指定键对应值
  • 和列表的pop操作一样,都是取走元素,只是表面上看着像删除了,但实际只是取走元素,可以用变量存储起来使用
dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
result = dog.pop('name')
print(dog)
# {'age': 3, 'breed': '哈士奇', 'gender': '公'}
print(result)
# 可乐
  • 字典.clear() - 清空字典
dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
dog.clear()
print(dog)
# {}

三、字典相关操作、函数、方法

1.字典的相关操作

  • 字典不支持加法运算、乘法运算、比较大小
  • 理论上sum、max、min、sorted字典都支持,但是没有意义(这些操作都是作用在键上),因为一般我们在处理数据时需要处理的都是值,键只是起到了一个对值进行区分和说明的作用。

1.in 和 not in - 判断字典中是否存在指定的

dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
print('可乐' in dog)             # False
print('name' in dog)            # True

2.字典的函数操作

1.len(字典) - 统计字典中键值对的个数

dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
print(len(dog))
# 4

2.dict(数据) - 将指定的数据转换成字典

  • 对数据的要求:
  • a.数据本身是一个容器
  • b.容器中的每一个元素必须是有两个元素的小容器
  • c.小容器中的第一个元素必须是不可变类型数据
data = [(10, 20), 'ab', range(2)]
print(dict(data))
# {10: 20, 'a': 'b', 0: 1}
data = [(100, 23), ('name', '小明'), (80, 100)]
print(data)
# [(100, 23), ('name', '小明'), (80, 100)]
  • 一种列表下标作为键,元素作为值的转换方法enumerate
  • 之前在列表中也说过,它其实就是把列表的下标和元素变成一个元组保存在列表中
names = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德']
print(dict(enumerate(names)))
# {0: '琴酒', 1: '灰原哀', 2: '柯南', 3: '毛利兰', 4: '贝尔摩德'}

3.字典的操作方法

1.复制字典

  • 字典.copy() - 复制字典产生一个一模一样的新字典
  • 和列表操作一样,都是创建一个新的字典,元素一样,地址不同
names = {0: '琴酒', 1: '灰原哀', 2: '柯南', 3: '毛利兰', 4: '贝尔摩德'}
print(id(names))
# 18882368
print(id(names.copy()))
# 18822976
print(names.copy())
# {0: '琴酒', 1: '灰原哀', 2: '柯南', 3: '毛利兰', 4: '贝尔摩德'}

2.获取字典所有的键,返回一个新的容器

  • 字典.keys()
  • 返回的不是列表
names = {0: '琴酒', 1: '灰原哀', 2: '柯南', 3: '毛利兰', 4: '贝尔摩德'}
print(names.keys())
# dict_keys([0, 1, 2, 3, 4])
# 虽然返回的不是列表没办法进行列表的操作,但只要是容器就可以循环取值
for i in names.keys():
    print(i,end=" ")
# 0 1 2 3 4

3. 获取字典所有的值,返回一个新的容器

  • 字典.values()
  • 和key一样返回容器型数据类型,但不是列表也可以用循环取值
names = {0: '琴酒', 1: '灰原哀', 2: '柯南', 3: '毛利兰', 4: '贝尔摩德'}
print(names.values())
# dict_values(['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德'])
for i in names.values():
    print(i,end=" ")
# 琴酒 灰原哀 柯南 毛利兰 贝尔摩德 

4. 将字典的每一个键值对转换成元组

  • 字典.items()
  • 返回的不是列表,但是容器型数据可以循环遍历取值操作
names = {0: '琴酒', 1: '灰原哀', 2: '柯南', 3: '毛利兰', 4: '贝尔摩德'}
print(names.items())
# dict_items([(0, '琴酒'), (1, '灰原哀'), (2, '柯南'), (3, '毛利兰'), (4, '贝尔摩德')])
for i in names.items():
    print(i,end=" ")
# (0, '琴酒') (1, '灰原哀') (2, '柯南') (3, '毛利兰') (4, '贝尔摩德') 

5. 批量添加字典数据

  • 字典1.update(字典2) - 将字典2中所有的键值对都添加到字典1中
names = {0: '琴酒', 1: '灰原哀', 2: '柯南', 3: '毛利兰', 4: '贝尔摩德'}
names.update({5: '赤井秀一', 6: '阿笠博士'})
print(names)
# {0: '琴酒', 1: '灰原哀', 2: '柯南', 3: '毛利兰', 4: '贝尔摩德', 5: '赤井秀一', 6: '阿笠博士'}

四、字典推导式

  • {表达式1:表达式2 for 变量 in 容器}
  • {表达式1:表达式2 for 变量 in 容器 if 条件语句}
  • 基本和列表推导式一样,只不过是换了[ ]换成了{ },表达式中间用:连接,其他都是一样的
result = {x: x**2 for x in range(10)}
print(result)       
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

总结

字典(dictionary)是除列表之外python之中最灵活的内置数据结构类型,键只能是不可变类型的数据(一般是字符串)并且键是唯一的,值 - 可以是任何类型的数据,熟练掌握字典和列表的操作,后面在进行数据处理时会有很大帮助。

文章来源:https://blog.csdn.net/qq_49771146/article/details/135253975
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。