字典的结构类似于json
中的对象——{"张三": 1, "李四": 2}
,实现原理有点类似于Java
中的HashMap
。
特点:
- 所有元素都是
key-value
对,key
不允许重复,value
可以重复 - 字典中的元素是无序的
- 字典中的key必须是不可变对象
- 字典比较占用内存空间
1. 字典的创建
字典的创建方式有两种:
- 使用
{}
创建 - 使用内置函数
dict()
创建
# 使用花括号{}创建
mydict = {"张三": 18, "李四": 25}
print(mydict) # {'张三': 18, '李四': 25}
# 使用内置函数dict()创建
mydict = dict(name="张三", age=18)
print(mydict) # {'name': '张三', 'age': 18}
2. 字典的元素查找
查找方式有两种:
- 使用
[]
:如果key
没有,则抛出异常。 - 使用
get()
函数:如果key
没有,返回None
,并且可以指定如果没有查找到该value
,则指定返回值。
2.1 使用[]
mydict = {"张三": 18, "李四": 25}
print(mydict) # {'张三': 18, '李四': 25}
age = mydict["张三"]
print(age) # 18
# 如果没有,报错
# age = mydict["王五"] KeyError: '王五'
2.2 使用get()
函数
mydict = {"张三": 18, "李四": 25}
print(mydict) # {'张三': 18, '李四': 25}
# 查找
age = mydict.get("张三")
print(age) # 18
# 没有查询到返回None
age = mydict.get("王五")
print(age) # None
# 指定没查询到的返回值
age = mydict.get("王五", -1)
print(age) # -1
3. 字典的增删改操作
3.1 判断元素
使用in
或not in
判断元素是否存在。
mydict = {"张三": 18, "李四": 25, "王五": 30}
print(mydict) # {'张三': 18, '李四': 25, '王五': 30}
print("张三" in mydict) # True
print("张三" not in mydict) # False
3.2 增加元素
mydict = {"张三": 18, "李四": 25}
print(mydict) # {'张三': 18, '李四': 25}
# 增加元素
mydict["王五"] = 30
print(mydict) # {'张三': 18, '李四': 25, '王五': 30}
3.3 删除元素
3.3.1 删除某个元素
使用del
进行删除某个元素操作,没有则报错。
mydict = {"张三": 18, "李四": 25, "王五": 30}
print(mydict) # {'张三': 18, '李四': 25}
# 删除某个元素
del mydict["王五"]
print(mydict) # {'张三': 18, '李四': 25}
# 删除某个元素 没有则报错
# del mydict["陈六"] KeyError: '陈六'
3.3.2 清空字典元素
使用clear()
清空字典。
mydict = {"张三": 18, "李四": 25, "王五": 30}
print(mydict) # {'张三': 18, '李四': 25, '王五': 30}
mydict.clear()
print(mydict) # {}
3.4 修改元素的值
修改元素的值,甚至可以修改数据类型。
mydict = {"张三": 18, "李四": 25, "王五": 30}
print(mydict) # {'张三': 18, '李四': 25, '王五': 30}
mydict["王五"] = "python"
print(mydict) # {'张三': 18, '李四': 25, '王五': 'python'}
4. 获取字典的视图
4.1 获取字典的keys
通过keys()
获取字典的keys
,得到的数据类型是dict_keys
,可以用list()
将keys
转换成list
。
mydict = {"张三": 18, "李四": 25, "王五": 30}
print(mydict) # {'张三': 18, '李四': 25, '王五': 30}
# 获取keys
myKey = mydict.keys()
print(myKey) # dict_keys(['张三', '李四', '王五'])
# 获取key的数据类型
print(type(myKey)) # <class 'dict_keys'>
# 将keys转换成list
print(list(myKey)) # ['张三', '李四', '王五']
4.2 获取字典的values
通过values()
获取字典的values
,得到的数据类型是dict_values
,可以用list()
将values
转换成list
。
mydict = {"张三": 18, "李四": 25, "王五": 30}
print(mydict) # {'张三': 18, '李四': 25, '王五': 30}
# 获取values
myValue = mydict.values()
print(myValue) # dict_values([18, 25, 30])
# 获取values的数据类型
print(type(myValue)) # <class 'dict_values'>
# 将values转换成list
print(list(myValue)) # [18, 25, 30]
4.3 获取字典的元组类型
通过items()
可以获取字典的元组,转换成的list
中的每个元素都是一个元组。
mydict = {"张三": 18, "李四": 25, "王五": 30}
print(mydict) # {'张三': 18, '李四': 25, '王五': 30}
# items
myItem = mydict.items()
print(myItem) # dict_items([('张三', 18), ('李四', 25), ('王五', 30)])
# 获取items的数据类型
print(type(myItem)) # <class 'dict_items'>
# 将items转换成list
print(list(myItem)) # [('张三', 18), ('李四', 25), ('王五', 30)]
5. 字典元素的遍历
mydict = {"张三": 18, "李四": 25, "王五": 30}
print(mydict) # {'张三': 18, '李四': 25, '王五': 30}
for item in mydict:
print(item, mydict[item], mydict.get(item))
# 输出:
# 张三 18 18
# 李四 25 25
# 王五 30 30
6. 字典生成式
字典的表达式依赖内置函数zip()
。
6.1 生成元组的列表
name = ["James", "Jordan", "Kobe"]
count = [4, 6, 5]
myList = zip(name, count)
print(myList) # <zip object at 0x0000020135939D80>
print(type(myList)) # <class 'zip'>
print(list(myList)) # [('James', 4), ('Jordan', 6), ('Kobe', 5)]
6.2 生成字典
字典生成式为:
{key表达式: value表达式 for key, value in zip(key列表, value列表)}
举例:
name = ["James", "Jordan", "Kobe"]
count = [4, 6, 5]
mydict = {name: count for name, count in zip(name, count)}
print(mydict) # {'James': 4, 'Jordan': 6, 'Kobe': 5}
# 生成的表达式
mydict = {name.upper(): count+10 for name, count in zip(name, count)}
print(mydict) # {'JAMES': 14, 'JORDAN': 16, 'KOBE': 15}