Python学习 - 字典

Python学习 - 语法入门:https://blog.csdn.net/wanzijy/article/details/125287855
Python学习 - 数据类型:https://blog.csdn.net/wanzijy/article/details/125341568
Python学习 - 流程控制:https://blog.csdn.net/wanzijy/article/details/125400906
Python学习 - 运算符(操作符):https://blog.csdn.net/wanzijy/article/details/125387919
Python学习 - 列表:https://blog.csdn.net/wanzijy/article/details/125457990
Python学习 - 字典:https://blog.csdn.net/wanzijy/article/details/125567225
Python学习 -元组和集合:https://blog.csdn.net/wanzijy/article/details/125577609
Python学习 - 函数(1):https://blog.csdn.net/wanzijy/article/details/125669084
Python学习 - 函数(2):https://blog.csdn.net/wanzijy/article/details/125739981
Python学习 - 类与对象:https://blog.csdn.net/wanzijy/article/details/125826952
Python学习 - 面向对象之封装:https://blog.csdn.net/wanzijy/article/details/125902925
Python学习 - 面向对象之继承:https://blog.csdn.net/wanzijy/article/details/125963829
Python学习 - 面向对象之多态:https://blog.csdn.net/wanzijy/article/details/127140632
Python - 文件操作(1):https://blog.csdn.net/wanzijy/article/details/127099071
Python - 文件操作(2):https://blog.csdn.net/wanzijy/article/details/127150189
Python学习 - 垃圾回收、特殊方法和模块:https://blog.csdn.net/wanzijy/article/details/126202999
Python学习 - 异常处理:https://blog.csdn.net/wanzijy/article/details/126803672

1. 简介

属于一种新的数据结构,称为映射(mapping)
和列表类似,都是用来存储对象的容器

列表存储数据的性能很好,但是查询数据的性能很差
在查询元素时,字典的效率是非常快的

在字典中可以保存多个对象,每个对象都会有一个唯一的名字
这个唯一的名字,称其为键(key),通过key可以快速的查询value
这个对象,我们称其为值(value)
所以字典,也称为键值对(key-value)结构
每个字典中都可以有多个键值对,而每一个键值对我们称其为一
项(item)

2. 使用

2.1 创建

  • { } 直接创建
  • dict() 创建
  • 也可以将一个包含有双值子序列的序列转换为字典
    • 双值序列:序列中只有两个值
    • 子序列:如果序列中的元素也是序列,那么我们就称这个元素为子序列
a = {
    'name' : '张三',
    'age' : 18
}
print(a)  #  {'name': '张三', 'age': 18}

a = dict(name = '李四', age = 18, gender = '男')  #  这种方式创建的字典都是字符串
print(a)  #  {'name': '李四', 'age': 18, 'gender': '男'}

a = dict([('name', '王五'), ('age', '24')])
print(a)  #  {'name': '王五', 'age': '24'}

字典里的键可以是任意的不可变对象(int str bool tuple),但是不能重复。如果出现重复的,后边的会替换前面的
字典的键一般都是字符串
字典里的值可以是任意对象

2.2 获取

  • 通过“ [ ] ”和 key 直接获取
  • 使用 get(key, [default]) 函数
b = {'name' : '张三', 'age' : '18'}

#  注意引号; 如果使用了字典中不存在的键,会抛出异常
print(b['name'])  #  张三

#  使用get函数,如果获取的键不存在,则返回None
print(b.get('name'))   #  张三
print(b.get('hello'))   #  None
print(a.get('hello', '键不存在就返回该默认值'))   #  键不存在就返回该默认值

2.3 修改

  • 通过“ [ ] ”和 key 直接修改
  • setdefault(key, value)
    • 如果key存在,则返回key的值,不会对字典做任何操作
    • 如果不存在,则向字典中添加这个key,并设置value
  • 使用 update([other])
    • 将其他的字典中的 key-value 添加到当前字典中
    • 如果有重复的 key,则后面的会替换掉当前的
a = {'name' : '张三', 'age' : '18'}

a['name'] = '刘柳'  #  存在则覆盖
print(a)  #  {'name': '刘柳', 'age': '24'}

a['address'] = '广东省'  #  不存在就在字典中添加该 key-value
print(a)  #  {'name': '刘柳', 'age': '24', 'address': '广东省'}

a.setdefault('name', '小黄')
print(a.setdefault('name', '小黄'))  #  刘柳
print(a)  #  {'name': '刘柳', 'age': '24', 'address': '广东省'}

a.setdefault('gender', '男')
print(a)  #  {'name': '刘柳', 'age': '24', 'address': '广东省', 'gender': '男'}

b = {
    'a': 1,
    'b': 2,
    'age': 89
}
a.update(b)
print(a)  #  {'name': '刘柳', 'age': 89, 'address': '广东省', 'gender': '男', 'a': 1, 'b': 2}

2.4 删除

  • del([key])
    • 根据 key 删除值
    • 如果 key 不存在,会报错
  • popitem()
    • 随机删除字典中的一个键值对,一般都会删除最后一个键值对
    • 删除后,会将删除后的 key-value 作为返回值返回
    • 返回的是一个元组,元组中有两个元素,第一个元素是key,第二个元素是value
    • 删除空字典时,会抛出异常
  • pop(key, [default])
    • 根据 key 删除 value
    • 会将删除的 value 返回
    • 如果删除不存在的 key,会抛出异常。如果指定了默认值,再删除不存在的key,则不会报错,而是直接返回默认值
  • clear() 用来清空字典
a = {'name': '刘柳', 'age': 89, 'address': '广东省', 'gender': '男', 'a': 1, 'b': 2'}
del a['a']

result = a.popitem()
print(result)  #  ('b', 2)

result1 = a.pop('gender')
print(result1)  #  男 

result2 = a.pop('asd', '默认值')
print(result2)  #  默认值

a.clear()
print(a)  #  {}

2.5 其他

len()

  • 获取字典中键值对的个数
  • 语法: len(字典)
a = {
    'name' : '张三',
    'age' : 18
}
print(len(a))  #  2

in 检查字典中是否包含指定的键,存在返回True,反之
not in 检查字典中是否不包含指定的键,不存在返回True,反之

b = {'name' : '张三', 'age' : '18'}
print('name' in b)  #  True

copy()

  • 用于对方法进行浅复制
  • 复制以后的对象,和原对象是独立的,修改一个不会影响另一个
  • 浅复制,只会简单的复制对象内部的值,如果值也是一个可变对象,这个可变对象不会被复制
a = {'name' : '张三', 'age' : '18'}
b = a.copy()  #  此时修改b的值不会影响a,修改a的值也不会影响b

a = {
    'id' : '1',
    'people' : {
        'name' : '张三',
        'age' : '18'
    }
}
b = a.copy()
print(a)  #  {'id': '1', 'people': {'name': '张三', 'age': '18'}}
print(b)  #  {'id': '1', 'people': {'name': '张三', 'age': '18'}}

a['people']['name'] = '李四'  #  注意,此时a和b中的’people’都会同时改变,因为’people’也是一个可变对象
print(a)  #  {'id': '1', 'people': {'name': '李四', 'age': '18'}}
print(b)  #  {'id': '1', 'people': {'name': '李四', 'age': '18'}}

3. 遍历

keys() 以序列的形式返回字典中所有的 key

a = {
    'name' : '张三',
    'age' : '18'
}

print(a.keys())  #  dict_keys(['name', 'age'])

values() 以序列的方式返回字典中所有的 value

a = {
    'name' : '张三',
    'age' : '18'
}

print(a.values())  #  dict_values(['张三', '18'])

items() 以序列的方式,返回字典中所有的项。序列中包含有双值子序列,双值分别是字典中的 key 和 value

a = {
    'name' : '张三',
    'age' : '18'
}

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

#  name 张三
#  age 18

利用 keys() 和 [ ] 遍历

a = {
    'name' : '张三',
    'age' : '18'
}

for key in a.keys() :
    print(key, a[key])

#  name 张三
#  age 18

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LF3_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值