<Python的字典>——《Python》

目录

1. 字典

1.1 字典是什么

1.2 创建字典

1.3 查找 key

1.4 新增/修改元素

1.5 删除元素

1.6 遍历字典元素

1.7 取出所有 key 和 value

1.8 合法的 key 类型


1. 字典

1.1 字典是什么

字典是一种存储 键值对 的结构.
键值对是计算机/生活中一个非常广泛使用的概念.
把 键(key) 和 值(value) 进行一个一对一的映射, 然后就可以根据键, 快速找到值.
举个栗子, 学校的每个同学, 都会有一个唯一的学号.
知道了学号, 就能确定这个同学.
此处 "学号" 就是 "键", 这个 "同学" 就是 "值".

1.2 创建字典

(1)创建一个空的字典. 使用 { } 表示字典
#1.创建字典

a = {}
print(type(a))
b = dict()
print(type(b))
(2)在创建的同时指定初始值
(3)键值对之间使用 ‘, ’分割, 键和值之间使用 : 分割. (冒号后面推荐加一个空格).
(4)使用 print 来打印字典内容
student = { 'id': 1, 'name': 'zhangsan' }
print(student)

以上字典student中,包含了两个键值对:

1)  ‘id’:1   key就是‘id’,value就是1

2)‘name’:‘zhangsan’  key就是‘name’,value就是‘zhangsan’

注:

  • 一个字典中的key 的类型不一定都一样
  • 一个字典中的value类型也不一定都一样
  • 字典对于key的类型有约束
  • 字典对于value的类型没有约束

(5)为了代码更规范美观, 在创建字典的时候往往会把多个键值对, 分成多行来书写.

student = {
    'id': 1,
    'name': 'zhangsan'
}
(6)最后一个键值对, 后面可以写 , 也可以不写.
student = {
    'id': 1,
    'name': 'zhangsan',
}

 

1.3 查找 key

  • 使用 in 可以判定 key 是否在 字典 中存在. 返回布尔值
student = {
    'id': 1,
    'name': 'zhangsan',
}
print('id' in student)
print('score' in student)
  • 使用 [ ] 通过类似于取下标的方式, 获取到元素的值. 只不过此处的 "下标" 是 key. (可能是整数, 也 可能是字符串等其他类型).

#2.使用 [ ]来判定key获取到value
student = {
    'id': 1,
    'name': 'zhangsan',
    99:'forever'
}
print(student['id'])
print(student['name'])
print(student[99])
print(student['score'])

如果 key 在字典中不存在, 则会抛出异常.
student = {
    'id': 1,
    'name': 'zhangsan',
}
print(student['score'])

注:

  • 对于字典来说,使用in或者[ ]来获取value,都是非常高效的操作!
  • 对于列表来说,使用in比较低效的(需要遍历整个列表),而使用[ ]是比较高效的(类似于数组/顺序表取下标)! 

1.4 新增/修改元素

使用 [ ] 可以根据 key 来新增/修改 value.
  • 如果 key 不存在, 对取下标操作赋值, 即为新增键值对
student = {
    'id': 1,
    'name': 'zhangsan',
}
student['score'] = 90
print(student)
#1.在字典中新增元素,使用[ ]来进行
student = {
    'id': 1,
    'name': 'zhangsan',
}
print(student)
#向字典里插入新的键值对
student['score'] = 90
print(student)
  • 如果 key 已经存在, 对取下标操作赋值, 即为修改键值对的值.
#2.在字典中,根据key修改value,也是使用[ ]
student = {
    'id': 1,
    'name': 'zhangsan',
}
print(student)
#向字典里插入新的键值对
student['score'] = 90
print(student)
student['score'] = 99
print(student)

1.5 删除元素

使用 pop 方法根据 key 删除对应的键值对.

#3.使用pop方法,根据key修改键值对
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 99
}
print(student)
student.pop('id')
print(student)

 1.6 遍历字典元素

遍历指的就是能够把一个可迭代对象,其所包含的元素依次取出来,并进行一些操作。整个过程要求不重不漏。

字典被设计的初衷,不是为了遍历,而是为了增删改查。

字典是哈希表,进行增删改查操作效率非常高!但字典的遍历则效率就比较低!

  • 直接使用 for 循环能够获取到字典中的所有的 key, 进一步的就可以取出每个值了.
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
for key in student:
    print(key, student[key])
注:
在C++/Java中,哈希表的键值对存储顺序是无序的!
但是在Python中的哈希表做了特殊处理,类似于队列保证先进先出,其遍历打印的顺序就是插入的顺序!所以说,Python的字典不是一个单纯的“哈希表”!   

1.7 取出所有 key 和 value

  • 使用 keys 方法可以获取到字典中的所有的 key
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
print(student.keys())
此处 dict_keys 是一个特殊的类型, 专门用来表示字典的所有 key. 大部分元组支持的操作对于  dict_keys 同样适用.
  • 使用 values 方法可以获取到字典中的所有 value
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
print(student.values())
此处 dict_values 也是一个特殊的类型, 和 dict_keys 类似.
  • 使用 items 方法可以获取到字典中所有的键值对.
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
print(student.items())
此处 dict_items 也是一个特殊的类型, 和 dict_keys 类似.

借助items()方法实现字典的遍历:

student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 99
}
for key, value in student.items():
    print(key, value)

 

1.8 合法的 key 类型

不是所有的类型都可以作为字典的 key.
字典本质上是一个 哈希表, 哈希表的 key 要求是 "可哈希的", 也就是可以计算出一个哈希值.
  • 可以使用 hash 函数计算某个对象的哈希值.
  • 但凡能够计算出哈希值的类型, 都可以作为字典的 key.
print(hash(0))
print(hash(3.14))
print(hash('hello'))
print(hash(True))
print(hash(()))           # ( ) 是一个空的元组
  • 列表无法计算哈希值.
print(hash([1, 2, 3]))

 

  • 字典也无法计算哈希值
print(hash({ 'id': 1 }))
注:
  • 不可变的对象,一般就是可哈希的!
  • 可变的对象,一般就是不可哈希的!
小结
  • 字典也是一个常用的结构. 字典的所有操作都是围绕 key 来展开的.
  • 需要表示 "键值对映射" 这种场景时就可以考虑使用字典.
  • 字典、列表、元组是Python中常用的内置类型,相比于int、str、float,它们内部可以再包含其他元素!这类称为容器/集合类!

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值