【Python】字典

目录

字典

字典是什么

创建字典

查找 key

新增/修改元素

删除元素

遍历字典元素

合法的 key 类型


字典

字典是什么

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

创建字典

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

为了代码更规范美观 , 在创建字典的时候往往会把多个键值对 , 分成多行来书写
student = {
    'id': 1,
    'name': 'zhangsan'
}
最后一个键值对 , 后面可以写 , 也可以不写
student = {
    'id': 1,
    'name': 'zhangsan',
}

查找 key

# 1. 使用 in 来判定某个key 是否在字典中存在
a = {
    'id': 1,
    'name': 'zhangsan'
}
print('id' in a) # True
print('classId' in a) # False

# in 只是判定 key 是否存在 和 value无关
print('zhangsan' in a) # False

# not in 来判断key 在字典中不存在 都是只喝key有关 就是第一个参数
print('id' not in a) # False
print('classId' not in a) # True

# 2. 使用[]来根据key获取value
a = {
    'id':1,
    'name': 'zhangsan',
    100:'lisi'
}

print(a['id'])
print(a['name'])
print(a[100])

使用 in 可以判定 key 是否在 字典 中存在 . 返回布尔值
student = {
    'id': 1,
    'name': 'zhangsan',
}
print('id' in student)
print('score' in student)

使用 [ ] 通过类似于取下标的方式 , 获取到元素的值 . 只不过此处的 " 下标 " key. ( 可能是整数 ,
可能是字符串等其他类型 ).
student = {
    'id': 1,
    'name': 'zhangsan',
}
print(student['id'])
print(student['name'])

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

新增/修改元素

# 字典的各种操作都是针对key来进行的!


# 1. 在字典中新增元素,使用[]来进行
a = {
    'id': 1,
    'name': 'zhangsan',
}

# 这个操作 就是往字典里面插入新的键值对
a['score'] = 90
print(a)

# 2. 在字典中 根据key 修改value 也是使用[] 来进行的
a['score'] = 100
print(a)

# 3. 使用pop()方法 根据key 删除键值对
a.pop('name')
print(a)
使用 [ ] 可以根据 key 来新增 / 修改 value.
如果 key 不存在 , 对取下标操作赋值 , 即为新增键值对
student = {
    'id': 1,
    'name': 'zhangsan',
}
student['score'] = 90
print(student)

如果 key 已经存在 , 对取下标操作赋值 , 即为修改键值对的值 .
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
student['score'] = 90
print(student)

删除元素

使用 pop 方法根据 key 删除对应的键值对 .
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
student.pop('score')
print(student)

遍历字典元素

字典设计的初衷,不是为了实现遍历,而是为了增删改查
字典是 哈希表 进行增删改查操作,效率都是非常糕的!!
而字典的遍历则效率就要差一些
在c++中 哈希表里面的键值对存储时无序的!
但是在python中还不太一样~~ python 中做了特殊处理~~能够保证遍历出来的顺序 就是和插入的顺序是一致的
直接使用 for 循环能够获取到字典中的所有的 key, 进一步的就可以取出每个值了
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
for key in student:
    print(key, student[key])

取出所有 key value
# keys 获取字典中所有的key
# values 获取字典中所有的value
# itmes 获取字典中所有的键值对
使用 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 类似 .

那么就会存在另外一种遍历的方式:

for key, value in a.items() :
    print(key,value)

合法的 key 类型

# 使用hash 函数能够计算出一个变量的哈希值
print(hash(0))
print(hash(3.14))
print(hash(0.2))
print(hash(True))
print(hash('hello'))
print(hash((1,2,3)))

# print(hash([1,2,3])) 不可hash
# print(hash({})) 不可hash
# 也就是说 不可变的对象 一般就是可以hash的 可变对象一般就是不可hash的
不是所有的类型都可以作为字典的 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 来展开的 .
需要表示 " 键值对映射 " 这种场景时就可以考虑使用字典 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值