Python字典详解

字典的定义

python中定义字典的方式为一对大括号括起的若干元素,各元素以键值对的形式存在,格式为:

键:值

dict1 = {"gender": "male", "name": "Mike"}
print(type(dict1), dict1, sep=",")
# <class 'dict'>,{'gender': 'male', 'name': 'Mike'}

若要定义一个空字典,可采取如下方式

dict1 = {}
dict2 = dict()
print(type(dict1), dict1, sep=",")
print(type(dict2), dict1, sep=",")
# <class 'dict'>,{}
# <class 'dict'>,{}

可见使用空{}或使用dict实例化一个字典对象都可实现定义一个空字典的功能,注意,因为集合也是使用大括号括起若干元素,所以若要定义空集合只能使用set(),具体可以参考我都另一篇博客Python集合set详解-CSDN博客

注意在字典中,不允许出现相同的键,若出现,则后出现的值会覆盖前面的值,

dict1 = {"gender": "male", "name": "Mike", "name": "Nancy"}
print(dict1)
# {'gender': 'male', 'name': 'Nancy'}

可见上面的字典"name"键对应的值由原来的Mike被后面的Nancy覆盖

从字典中取键和值

字典中没有像列表和元组一样可以使用下标进行索引,字典中只能用键去查找值

dict1 = {"gender": "male", "name": "Mike"}
print(dict1["gender"])
# male

可见与列表和元组的不同在于把下标换成了键,同样在没查找到的时候会报错

dict1 = {"gender": "male", "name": "Mike"}
print(dict1["hobby"])
# Traceback (most recent call last):
#   File "D:\Pythonproject\teach_day_01\demo01.py", line 2, in <module>
#     print(dict1['hobby'])
#           ~~~~~^^^^^^^^^
# KeyError: 'hobby'
get()方法取值 

同时字典中还支持使用get()方法进行取值,参数为要查找的键,若没查找到则返回None 

dict1 = {"gender": "male", "name": "Mike"}
print(dict1.get("hobby"))
# None
dict1 = {"gender": "male", "name": "Mike"}
print(dict1.get("gender"))
# male

 不止如此,get还可以设置第二个参数为在没找到的时候返回的值(默认是None)

dict1 = {"gender": "male", "name": "Mike"}
print(dict1.get("hobby", "not found"))
# not found

 for循环遍历字典

python中要取出容器中的值,常用的方法为使用for循环遍历容器取值,但是纯粹的for循环遍历却无法完整的取出字典的每个键值对

dict1 = {"gender": "male", "name": "Mike"}
for i in dict1:
    print(i)
# gender
# name

可见纯粹的for循环只能取出字典的键

当然,字典自带的方法中keys(),values(),items()分别对应取出字典中的键,值,键值对

dict1 = {"gender": "male", "name": "Mike"}
print(dict1.keys())
print("*" * 50)
print(dict1.values())
print("*" * 50)
print(dict1.items())
# dict_keys(['gender', 'name'])
# **************************************************
# dict_values(['male', 'Mike'])
# **************************************************
# dict_items([('gender', 'male'), ('name', 'Mike')])

可见,取出的dict_keys,dict_values,dict_items分别为键,值,键值对,但是要注意,dict_keys,dict_values,dict_items为取出的值的类型,而这些类型不支持下标索引

dict1 = {"gender": "male", "name": "Mike"}
print(dict1.keys()[1])
# Traceback (most recent call last):
#   File "D:\Pythonproject\teach_day_01\demo01.py", line 2, in <module>
#     print(dict1.keys()[1])
#           ~~~~~~~~~~~~^^^
# TypeError: 'dict_keys' object is not subscriptable

可以看到报错中显示了 not subscriptable,subscript有订阅和下标的意思,subscriptable的意思为“可被下标索引的“,所以,要想取出这种类型数据的值,可以选择遍历取值和进行类型转换

dict1 = {"gender": "male", "name": "Mike"}
print(list(dict1.keys()))
print("*" * 50)
print(list(dict1.values()))
print("*" * 50)
print(list(dict1.items()))
# ['gender', 'name']
# **************************************************
# ['male', 'Mike']
# **************************************************
# [('gender', 'male'), ('name', 'Mike')]

使用for循环遍历字典,也就是遍历字典的keys(),values(),items(),注意字典的items()里面的元素为包含各个键值对的元组,所以要使用两个变量进行解包

dict1 = {"gender": "male", "name": "Mike"}
for i in dict1.keys():
    print(i, sep=",")
print("*" * 50)
for i in dict1.values():
    print(i, sep=",")
print("*" * 50)
for key, value in dict1.items():
    print(key, value, sep=",")
print("*" * 50)
# gender
# name
# **************************************************
# male
# Mike
# **************************************************
# gender,male
# name,Mike
# **************************************************

字典添加元素

以上述例子中的dict1为例,dict1['键名'] = '值',若键名未在字典中出现过就是给字典添加了一个新的键值对,否则就是对该键对应的值进行修改

dict1 = {"gender": "male", "name": "Mike"}
dict1["hobby"] = "basketball"
print(dict1)
dict1["hobby"] = "football"
print(dict1)
# {'gender': 'male', 'name': 'Mike', 'hobby': 'basketball'}
# {'gender': 'male', 'name': 'Mike', 'hobby': 'football'}
update()方法

update()方法也可以给字典添加元素,通常有两种方式,第一种是以一个字典作为参数,若该字典中的键未在要添加的字典中出现过,则添加该键值对,否则为修改值;第二种是直接使用 键名 = 值 作为参数,注意这里的键名不要加引号,否则会报错,同样若该键未在要添加的字典中出现过,则添加该键值对,否则为修改值

dict1 = {"gender": "male", "name": "Mike"}
dict1.update({"hobby": "basketball"})
print(dict1)
dict1.update({"hobby": "football"})
print(dict1)
dict1.update(hometown="China")
print(dict1)
dict1.update(hometown="America")
print(dict1)
# {'gender': 'male', 'name': 'Mike', 'hobby': 'basketball'}
# {'gender': 'male', 'name': 'Mike', 'hobby': 'football'}
# {'gender': 'male', 'name': 'Mike', 'hobby': 'football', 'hometown': 'China'}
# {'gender': 'male', 'name': 'Mike', 'hobby': 'football', 'hometown': 'America'}

字典删除元素

字典删除元素的方法通常有三个pop(),popitem(),clear()

pop()

pop()函数的参数为要删除的键值对的键,返回值为删除的值

dict1 = {"gender": "male", "name": "Mike"}
a = dict1.pop("gender")
print(dict1)
print(a)
# {'name': 'Mike'}
# male
popitem()

popitem()没有要设置的参数,作用是删除字典最后的一个键值对,同样也会返回删除的键值对

dict1 = {"gender": "male", "name": "Mike"}
a = dict1.popitem()
print(dict1)
print(a)
# {"gender": "male"}
# ("name", "Mike")
clear()

clear()的作用为删除全部元素,与列表和集合作用类似

dict1 = {"gender": "male", "name": "Mike"}
dict1.clear()
print(dict1)
# {}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值