字典是一种可变容器模型,且可存储任意类型的对象。字典中每个元素都是一组键值对,字典可以进行查询、增、改、删的相关操作,字典类型是Python中一个重要的数据类型之一,是Python基础中需要重点掌握的知识点之一。下面本文对字典的相关操作进行详细的阐述。
1.字典的创建
(1)使用{}创建字典
字典可以直接使用{}创建,每个键值对的key和value用冒号分割,每个键值对之间用逗号隔开,整个字典包括在花括号中,如下代码示例:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
print(scores)
print(type(scores))
运行结果如下:
{'小红': 100, '小蓝': 98, '小绿': 97}
<class 'dict'>
注意字典中的key不能重复,如果重复后面的键值对会把前面的键值对覆盖,value是可以重复的,如下代码:
scores = {'小红': 100, '小蓝': 98, '小绿': 97, '小红': 60,'小紫': 98}
print(scores)
运行结果如下:
{'小红': 60, '小蓝': 98, '小绿': 97, '小紫': 98}
通过观察我们可以看到,键值对“小红”:100被“小红”:60覆盖掉了,小蓝和小紫都是98,就没有问题。
如果创建空字典,可用如下代码:
d = {}
(2)使用构造函数dict()创建字典
Python中内置了构造函数dict(),可用该函数创建字典,创建时key和value中间用等号连接,并且key的字符串不用带引号,如下代码示例:
s = dict(小红=100, 小蓝=98, 小绿=97) # 注意key字符串不加引号
print(s)
运行结果如下:
{'小红': 100, '小蓝': 98, '小绿': 97}
注意key的字符串不能带引号,如果带引号系统会报错,如下代码:
s = dict("小红"=100, "小蓝"=98, "小绿"=97)
print(s)
运行报错:SyntaxError: expression cannot contain assignment
注意value如果时字符串类型,必须加引号,如下代码:
student = dict(name='小红', age=20,score=100) # 注意value字符串要加引号
print(student)
运行结果如下:
{'name': '小红', 'age': 20, 'score': 100}
(3)使用zip()函数创建字典
Python中可以使用zip()函数将两个列表打包成字典,例如学生名字的列表是小红、小蓝、小蓝,小紫,分数列表是100,98,97,98,打包成字典的代码如下:
students = ['小红', '小蓝', '小绿', '小紫']
scores = [100, 98, 97, 98]
d = {stu: sco for stu, sco in zip(students, scores)}
print(d)
运行结果如下:
{'小红': 100, '小蓝': 98, '小绿': 97, '小紫': 98}
以上代码还可以结合dict()函数,得到的结果是一样的,代码如下:
students = ['小红', '小蓝', '小绿', '小紫']
scores = [100, 98, 97, 98]
d = dict(zip(students,scores))
print(d)
以上是字典的创建方法,我们可以根据自己的实际需求采用不同的创建方式。以上我们创建了两个字典,第一个是一个班级中每个学生的名字对应的分数组成的字典,例如:{'小红': 100, '小蓝': 98, '小绿': 97, '小紫': 98},第二个是一个学生的名称、年龄、分数等属性组成的字典,例如:{'name': '小红', 'age': 20, 'score': 100},在实际应用中两种用法都会用到,我们再扩展一下,第二种一个字典是一个学生,一个班级的学生可以把每个学生的字典装到一个列表里,例如:[{'name': '小红', 'age': 20, 'score': 100},{'name': '小蓝', 'age': 20, 'score': 98},{'name': '小绿', 'age': 19, 'score': 97},{'name': '小紫', 'age': 21, 'score': 98}],这样我们就可以进行后续的数据分析等相关的处理。本文此处不展开说明,后续可能会单独写一篇文章。
2.获取字典中的元素
(1)使用[]获取value值
字典可以使用[]获取value,语法为dict[key]得到的是key对应的value值,具体详见如下代码:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
print(scores['小红'])
运行输出的结果为:100
如果输入的key在字典中没有,则运行时报错,如下代码:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
print(scores['小紫'])
运行报错:KeyError: '小紫'
(2)使用get()方法获取value值
Python中可以使用get()方法获取value值,如果key在字典中没有,运行时不会报错,如下代码:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
print('小蓝的分数是', scores.get('小蓝'))
print('小紫的分数是', scores.get('小紫'))
运行结果如下:
小蓝的分数是 98
小紫的分数是 None
我们可以看到小蓝的分数可以获取到,由于小紫在字典中没有,所以小紫的分数返回的结果是 None
get()方法中可以设置默认值,如果字典中查找不到,则返回设定的value值,如果字典中能查到,则返回字典中的value值,并且该操作不会对字典中的数据进行修改,如下代码:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
print('小蓝的分数是', scores.get('小蓝', 70)) #70是在查找“小蓝”所对应的value不存在时,提供的一个默认值
print('小紫的分数是', scores.get('小紫', 70)) #70是在查找“小紫”所对应的value不存在时,提供的一个默认值
print(scores)
运行结果:
小蓝的分数是 98
小紫的分数是 70
{'小红': 100, '小蓝': 98, '小绿': 97}
(3)使用keys()方法获取所有的key
Python内置了keys()方法,可以获取字典中的所有的key,返回的是一个数据类型为'dict_keys'的对象,它是一个可迭代的对象,可以使用for循环拿到对象中的每个元素,如下代码:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
keys = scores.keys()
print("返回的对象是\t\t\t", keys)
print("返回的对象的数据类型是\t", type(keys))
print("用for循环拿到的每个元素是:")
for key in keys:
print(key)
运行结果如下:
返回的对象是 dict_keys(['小红', '小蓝', '小绿'])
返回的对象的数据类型是 <class 'dict_keys'>
用for循环拿到的每个元素是:
小红
小蓝
小绿
使用keys()方法获取的对象也可以用list()转化成列表:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
keys = scores.keys()
print(list(keys)) # 将所有的key组成的元素转成列表
运行结果如下:
['小红', '小蓝', '小绿']
(4)使用values()方法获取所有的value
Python内置了values()方法,可以获取字典中的所有的value,返回的是一个数据类型为'dict_values'的对象,它是一个可迭代的对象,可以使用for循环拿到对象中的每个元素,如下代码:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
values = scores.values()
print("返回的对象是\t\t\t", values)
print("返回的对象的数据类型是\t", type(values))
print("用for循环拿到的每个元素是:")
for value in values:
print(value)
运行结果如下:
返回的对象是 dict_values([100, 98, 97])
返回的对象的数据类型是 <class 'dict_values'>
用for循环拿到的每个元素是:
100
98
97
使用values()方法获取的对象也可以用list()转化成列表:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
values = scores.values()
print(list(values))
运行结果如下:
[100, 98, 97]
(5)使用items()方法获取所有的key-value对
Python内置了items()方法,可以获取字典中的所有的key-value对,返回的是一个数据类型为'dict_items'的对象,它是一个可迭代的对象,可以使用for循环拿到对象中的每个元素,如下代码:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
items = scores.items()
print("返回的对象是\t\t\t", items)
print("返回的对象的数据类型是\t", type(items))
print("用for循环拿到的每个元素是:")
for item in items:
print(item)
运行结果如下:
返回的对象是 dict_items([('小红', 100), ('小蓝', 98), ('小绿', 97)])
返回的对象的数据类型是 <class 'dict_items'>
用for循环拿到的每个元素是:
('小红', 100)
('小蓝', 98)
('小绿', 97)
使用items()方法获取的对象也可以用list()转化成列表:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
items = scores.items()
print(list(items)) # 转换之后的元素是由元组组成的
运行结果如下:
[('小红', 100), ('小蓝', 98), ('小绿', 97)]
我们从上面可以看到,用for循环拿到的每个元素和list()转化成的列表中的每个元素都是一个元组,元组的相关操作本人在将来会再写一篇文章。
(6)通过遍历字典获取所有的元素
字典可以通过for循环进行遍历:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
for item in scores:
print(item, scores[item])
运行结果如下:
小红 100
小蓝 98
小绿 97
以上代码中csores[item]也可以写成scores.get(item)
字典遍历还有另外一种方式,如下代码,运行结果与上述代码相同:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
for name, score in scores.items():
print(name, score)
3.字典的增、改、删操作
(1)字典增加元素
①可以直接用方括号来添加元素,如下代码:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
print('原字典\t\t\t', scores)
# 向字典中添加元素
scores['小紫'] = 98
print('增加元素后的字典\t', scores)
运行结果如下:
原字典 {'小红': 100, '小蓝': 98, '小绿': 97}
增加元素后的字典 {'小红': 100, '小蓝': 98, '小绿': 97, '小紫': 98}
②可以通过for循环将两个字典合并成一个字典,如下代码示例将字典d2中的所有元素添加到d1中:
d1 = {'小红': 100, '小蓝': 98, '小绿': 97}
d2 = {'小紫': 98, '小黑': 88}
print('原字典\t\t\t', d1)
# 通过for循环将d2中的元素添加到d1中
for item in d2:
d1[item] = d2[item]
print('增加元素后的字典\t', d1)
运行结果如下:
原字典 {'小红': 100, '小蓝': 98, '小绿': 97}
增加元素后的字典 {'小红': 100, '小蓝': 98, '小绿': 97, '小紫': 98, '小黑': 88}
③以上第②条可以用python提供的update()方法实现,代码更简洁高效,代码运行后的结果与上述代码完全一样。注意update()方法只能接受字典结构的数据。
d1 = {'小红': 100, '小蓝': 98, '小绿': 97}
d2 = {'小紫': 98, '小黑': 88}
print('原字典\t\t\t', d1)
# 用update()方法添加元素
d1.update(d2)
print('增加元素后的字典\t', d1)
(2)字典元素的修改
① 可以直接用[]重新赋值的方式对字典中的value值进行修改,如下代码示例,将小红的成绩100改为99:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
print('原字典\t\t', scores)
scores['小红'] = 99
print('修改后的字典\t', scores)
运行的结果如下:
原字典 {'小红': 100, '小蓝': 98, '小绿': 97}
修改后的字典 {'小红': 99, '小蓝': 98, '小绿': 97}
② 可以使用update()方法对字典中的元素进行修改,如下代码运行结果与上述代码的结果相同。
d1 = {'小红': 100, '小蓝': 98, '小绿': 97}
print('原字典\t\t', d1)
# 用update()方法修改元素
d1.update({"小红": 99})
print('修改后的字典\t', d1)
使用update()方法既可以对字典进行修改,也可以对字典进行添加,如果字典中有对应的key,则对字典中key对应的value值进行修改,如果没有则增加,如下代码运行后对小红的分数进行了修改,同时又增加了小紫和小黑的数据
d1 = {'小红': 100, '小蓝': 98, '小绿': 97}
d2 = {'小红': 99, '小紫': 98, '小黑': 88}
print('原字典\t\t\t', d1)
# 用update()方法更新元素
d1.update(d2)
print('更新元素后的字典\t', d1)
运行结果如下:
原字典 {'小红': 100, '小蓝': 98, '小绿': 97}
更新元素后的字典 {'小红': 99, '小蓝': 98, '小绿': 97, '小紫': 98, '小黑': 88}
③Python中是无法直接对字典中的key进行修改的,如果要修改key,需要先删除对应的键值对,再添加键值对,如下代码是将小红的名字改成小洪:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
print('修改前的字典', scores)
# 先获取小红的分数,存入到变量xiaohong_score中
xiaohong_score = scores['小红']
# 删除字典中小红的键值对
scores.pop('小红')
print('删除后的字典', scores)
# 添加小洪的键值对
scores['小洪'] = xiaohong_score
print('修改后的字典', scores)
运行结果如下
修改前的字典 {'小红': 100, '小蓝': 98, '小绿': 97}
删除后的字典 {'小蓝': 98, '小绿': 97}
修改后的字典 {'小蓝': 98, '小绿': 97, '小洪': 100}
(3)字典元素的删除
①删除字典中的元素可以用pop()方法进行删除,如下代码:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
print('删除前的字典', scores)
scores.pop('小红')
print('删除后的字典', scores)
运行结果如下:
删除前的字典 {'小红': 100, '小蓝': 98, '小绿': 97}
删除后的字典 {'小蓝': 98, '小绿': 97}
②用clear()方法可以清空字典中的所用元素,如下代码:
scores = {'小红': 100, '小蓝': 98, '小绿': 97}
print('删除前的字典', scores)
scores.clear()
print('删除后的字典', scores)
运行结果如下:
删除前的字典 {'小红': 100, '小蓝': 98, '小绿': 97}
删除后的字典 {}
③用del 语句可以将整个字典对象删除。
del scores
4.统计字典中键值对的数量
Python中可以中方法len()来获取字典的键值对数量。如下代码:
scores = {'小红': 99, '小蓝': 98, '小绿': 97, '小紫': 98, '小黑': 88}
print(len(scores))
运行结果为:5
5.总结
以上是Python中字典的基本用法,需要熟练掌握的知识点。
如果想了解Python中其他数据类型的相关基础操作,请详见本人的其他文章: