Python字典(dict)详解(超详细!!!)

强烈推荐!!Python系列专栏更多内容汇总可以点击下面跳转链接查看
Python基础语法+算法模板+例题分享专栏导航



1. 什么是字典

  • 字典是另一种可变容器模型,且可存储任意类型对象。
  • 字典的每个键值对( key=>value )用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示:

dict = {key1 : value1, key2 : value2, key3 : value3 }

简言之,字典就是一个能够存放多个映射关系( key映射value )的数据结构,可以用下面这张图清晰的表示出来
在这里插入图片描述
注意:字典里的key必须是唯一的,因为要实现一对一的映射关系

2. 如何创建字典

  • 可以使用大括号{}创建字典,实例如下
# 使用大括号 {} 来创建空字典
emptyDict = {}

# 创建有内容的字典
dict = {"sjh": 985, "zym": 985, 123: 123}

# 打印字典
print(emptyDict)
print(dict)

输出结果:

{}
{‘sjh’: 985, ‘zym’: 985, 123: 123}

3. 访问字典里的值

3.1 根据key查询value

  • 字典可以通过字典名[key]去访问value,实例如下:
d = {"sjh": 985, "zym": "cute", 123: 456}

print(d["sjh"])
print(d["zym"])
print(d[123])

输出结果:

985
cute
456

3.2 dict.get(key, default=None)查询value —>推荐使用这个

  • dict.get(key, default=None) 函数返回指定键的值,如果key没有的话,则会返回default(默认是None,如果你设置了该参数则返回你设置的default)

下面给一个例子

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

print(dict.get('Name'))
print(dict.get('abc')) #没有key='abc',返回None
print(dict.get('123', -1)) #没有key='123',返回设置的default=-1

输出结果:

Runoob
None
-1

那么看到这里,大家可能有疑问,这两种方法有啥区别?谁更好?

  • get(key) 方法在 key(键)不在字典中时,可以返回默认值 None 或者设置的默认值。
  • dict[key] 在 key(键)不在字典中时,会触发 KeyError 异常。

显而易见的,使用get(key)方法更保险!!!

4. 修改字典

  • 根据3.1里讲的方法,通过字典名[key]得到value,直接修改即可,实例如下:
d = {"sjh": 985, "zym": "cute", 123: 456}
d["sjh"] = 666

print(d["sjh"])

输出结果:

666

注意:字典无法修改key,只能修改value

5. 删除字典元素

5.1 del删除键值对(不返回value)

  • del 字典名[key]可以删除字典里key-value这个键值对,实例如下:
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

del dict['Name']  # 删除键 'Name'

print(dict)

输出结果:

{‘Age’: 7, ‘Class’: ‘First’}

5.2 dict.pop(key, default)删除键值对(返回value)

  • dict.pop(key, default) 删除字典 key(键)及其所对应的值,返回被删除的值。如果键不存在,则可以选择返回一个默认值default(如果参数里提供了)

参数的含义如下:

  • key:要移除的键。
  • default(可选):如果键不存在时,返回的默认值。如果没有提供默认值且键不存在,会引发 KeyError 异常。

下面给一个例子:

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

ans = dict.pop('Name') 
age = dict.pop('age11', -1) #没有age11这个key的话返回-1

print("ans = ", ans)
print("age = ", age)
print("dict = ", dict)

输出结果:

ans = Runoob
age = -1
dict = {‘Age’: 7, ‘Class’: ‘First’}

ps:当即需要删除键值对,还需要返回key对应的value的时候可以用这个,但是感觉好像没啥使用空间emmm反正我没遇到过,因为字典一般不需要删除键值对,只作为容器存储数据

6. dict的内置函数

有一些字典里的内置函数还是蛮好用的,下面给出一些常用的

6.1 key in dict 查询key是否在dict里

  • key in dict 用于判断键是否存在于字典中,如果键在字典 dict 里返回 true,否则返回 false
  • key not in dict 则判断见是否不存在字典中

下面给一个例子:

thisdict = {'Name': 'Runoob', 'Age': 7}

# 检测键 Age 是否存在
if 'Age' in thisdict:
    print("键 Age 存在")
else:
    print("键 Age 不存在")

# 检测键 Sex 是否存在
if 'Sex' in thisdict:
    print("键 Sex 存在")
else:
    print("键 Sex 不存在")

# not in

# 检测键 Age 是否不存在
if 'Age' not in thisdict:
    print("键 Age 不存在")
else:
    print("键 Age 存在")

输出结果:

键 Age 存在
键 Sex 不存在
键 Age 存在

ps:in操作在列表等数据结构里都有类似的操作,感兴趣可以Google之

6.2 dict.keys() 返回dict里的所有key

  • dict.keys() 方法返回一个key的视图对象
    ps: 视图对象不是列表,不支持索引,可以使用 list() 来转换为列表。因为在使用中如果直接使用dict.keys(),那么返回值为dict_keys,并非直接的列表,若要返回列表值还需调用list函数。

下面给一个例子:

dict = {"sjh": 985, "zym": 985, "zhangsan": 211, 985: 666}

print(type(dict.keys()))

l = list(dict.keys())
print(l)

输出结果:

<class ‘dict_keys’>
[‘sjh’, ‘zym’, ‘zhangsan’, 985]

6.3 dict.values() 返回dict里的所有value

  • dict.values() 方法返回一个视图对象,与dict.keys()是一样的,实例如下:
dict = {"sjh": 985, "zym": 985, "zhangsan": 211, 985: 666}

print(type(dict.values()))

l = list(dict.values())

print(l)

输出结果:

<class ‘dict_values’>
[985, 985, 211, 666]

##6.4 dict.items() 返回所有键值对

  • dict.items() 方法返回字典的所有键值对的视图,与上面的依旧一样,实例如下:
dict = {"sjh": 985, "zym": 985, "zhangsan": 211, 985: 666}

print(dict.items())

l = list(dict.items())
print(l)

输出结果:

dict_items([(‘sjh’, 985), (‘zym’, 985), (‘zhangsan’, 211), (985, 666)])
[(‘sjh’, 985), (‘zym’, 985), (‘zhangsan’, 211), (985, 666)]

6.4 dict.clear() 清空字典

  • dict.clear()用于删除字典内所有键值对,实例如下:
tinydict = {'Name': 'Zara', 'Age': 7}

print ("字典长度 : %d" %  len(tinydict))
tinydict.clear()
print ("字典删除后长度 : %d" %  len(tinydict))

结果如下:

字典长度 : 2
字典删除后长度 : 0


总结

本文详细讲解了字典的特性、操作字典的各种方法以及python自带的一些字典的内置函数,真正要掌握还是需要大量的练习,写代码是必不可少的!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值