Python中字典的相关操作

字典是一种可变容器模型,且可存储任意类型的对象。字典中每个元素都是一组键值对,字典可以进行查询、增、改、删的相关操作,字典类型是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中其他数据类型的相关基础操作,请详见本人的其他文章:

Python中字典的相关操作

Python中列表的相关操作

Python中元组的相关操作

Python中如何将列表中的元素进行拼接组合

Python中集合的相关操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值