当前位置: 代码迷 >> 综合 >> 8.字典
  详细解决方案

8.字典

热度:50   发布时间:2023-09-12 06:44:09.0

字典

什么是字典?

字典( dict )是一个复合数据类型,用于将其他值组合在一起。

dict(字典)类型是mapping(映像类型)的一个子类也是唯一一个子类,字典(dict)类型是一个可变数据类型,它的每一个元素都是一个键/值对(key,value)

创建字典

使用一对大括号创建一个字典

data = {"name":"angle","number":1,123:123,
}

访问字典元素

  • 通过键值(key)访问元素
  • 当键(key)在字典中不存在的时候,会抛出一个KeyError错误
data = {"name":"angle","number":1,123:123,
}print(data['name'])print(data['person'])运行结果
-----------
angleTraceback (most recent call last):File "E:/JetBrains/Code_practice_project/test/1.py", line 8, in <module>print(data['person'])
KeyError: 'person'
  • get(key[,default] )
    • 如果key在字典中,则返回key的值,否则返回default。 如果未给出default,则默认为None,因此此方法永远不会引发KeyError
data = {"name":"angle","number":1,123:123,
}print(data.get('name'))
print(data.get('person'))
print(data.get('person','没有这个值'))运行结果
-----------
angle
None
没有这个值
  • setdefault(key[,default] )
    • 如果key在字典中,则返回其值。如果没有,插入钥匙 ,值为默认和返回默认值。 默认为 None。
data = {"name":"angle","number":1,123:123,
}print(data.setdefault('person','angle'))
print(data.get('person','没有这个值'))运行结果
------------------
angle
angle

修改字典

  • 直接修改
  • 如果键值对不存在,会添加这个键值对的
data = {"name":"angle","number":1,123:123,
}data['name'] = 'miku'print(data.get('name'))运行结果
-----------
mikudata = {"number":1,123:123,
}data['name'] = 'miku'
print(data.get('name')运行结果
-----------
miku
  • update([other_dict])
    • 更新与来自键/值对字典等,覆盖现有的密钥。返回None
data = {"name":"miku","number":1,123:123,
}data.update({'name':'angle'})print(data.get('name'))运行结果
-----------
angledata = {"number":1,123:123,
}data.update({'name':'angle'})print(data.get('name'))运行结果
-----------
angle

删除字典

  • 使用del语句删除字典
data = {
"name":"miku",
"number":1,
123:123,
}del data['name']print(data.get('name'))运行结果
-----------
None
  • pop(key[, default])
    • 如果key在字典中,则将其删除并返回其值,否则返回default。 如果未给出default并且key不在字典中,则引发KeyError。
data = {
"name":"miku",
"number":1,
123:123,
}data.pop('name')print(data.get('name'))运行结果
-----------
Nonedata = {
"name":"miku",
"number":1,
123:123,
}data.pop('person')运行结果
----------------
Traceback (most recent call last):File "E:/JetBrains/Code_practice_project/test/1.py", line 8, in <module>data.pop('person')
KeyError: 'person'
  • clear()
    • 清除所有键值对
data = {"name":"miku","number":1,123:123,
}data.clear()
print(data.get('name'))运行结果
-----------
None
  • popitem()
    • 删除字典的最后一个键值对
data = {
"name":"miku",
"number":1,
123:123,
}data.popitem()
data.popitem()print(data)运行结果
-------------
{'name': 'miku'}

返回所有键值对

  • items()
    • 返回字典的所有键值对
data = {
"name":"miku",
"number":1,
123:123,
}print(data.items())for key,value in data.items():print("键:",key,"值:",value)运行结果
------------
dict_items([('name', 'miku'), ('number', 1), (123, 123)])
键: name 值: miku
键: number 值: 1
键: 123 值: 123

返回所有键

  • keys()
    • 返回所有键
data = {
"name":"miku",
"number":1,
123:123,
}print(data.keys())for key in data.keys():print("键:",key)运行结果
-----------------
dict_keys(['name', 'number', 123])
键: name
键: number
键: 123

返回所有值

  • values()
    • 返回所有值
data = {
"name":"miku",
"number":1,
123:123,
}print(data.values())for value in data.values():print("值:",value)运行结果
-----------------------
dict_values(['miku', 1, 123])
值: miku
值: 1
值: 123

检查字典中是否存在键或值

可以使用in和not in操作符判断某个键或者值存在于字典中

>>> person = {"name":'miku','age':7}
>>> 'name' in person
True
>>> 'name' in person.keys()
True
>>> 'miku' in person.values()
True
>>> 'color' in person.keys()
False
>>> 'color' in person.values()
False

直接赋值和 copy 的区别

  • copy()
    • 返回字典的浅表副本。

可以通过以下实例说明:

dict1 =  {'user':'runoob','num':[1,2,3]}dict2 = dict1          # 浅拷贝: 引用对象
dict3 = dict1.copy()   # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用# 修改 data 数据
dict1['user']='root'
dict1['num'].remove(1)# 输出结果
print(dict1)
print(dict2)
print(dict3)

实例中 dict2 其实是 dict1 的引用(别名),所以输出结果都是一致的,dict3 父对象进行了深拷贝,不会随dict1 修改而修改,子对象是浅拷贝所以随 dict1 的修改而修改。

{'num': [2, 3], 'user': 'root'}
{'num': [2, 3], 'user': 'root'}
{'num': [2, 3], 'user': 'runoob'}
  相关解决方案