python学习-python字典的操作

本文介绍了Python字典的基本操作,包括增加、删除、修改和查找元素。通过实例详细解释了如何操作字典,包括对嵌套字典的处理,以及`setdefault`方法的使用。同时,提供了两种循环输出字典元素的方法,并讨论了它们在性能上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在python中,字典是一种key-value类型数据,在字典中,key是一个元素惟一的标识,什么是字典类型,下面举一个简单的例子。

student = {'20141346001':'dinghaisheng',
           '20141346002':'wangzichun',
           '20141346003':'wangruiju'}
print(student)

        注意key和value之间是用分号,每一个元素之间是用逗号,这是一个python中一个名为student的数据,里面有三个元素,前一个表示学号,后一个是名字,我们都知道在学校中可能有重名的情况,但是学号是唯一的,这点在python字典数据类型中也一样。

然后来说一下对字典的操作,常规操作为增、删、改、查。

1. 如果我想增加一个学号为20141346005的学生名叫jiangwei

student['20141346005'] = 'jiangwei'

2.如果我想删除学号为20141346003的学生,可以 del 字典名[想删除的学号]

del student['20141346003']

如果直接del student,则表示直接删除了student这个字典(即删除该字典中所有元素),这里再介绍一种删除字典元素的方法

student.pop('20141346003')

3. 如果我想修改学号20141346001的学生名字为haisheng

student['20141346001'] = 'haisheng'

4. 如果我想查找学号为20141346001的学生名字是否在这个student字典中,可以

print('20141346001' in student )

返回的值为True,若字典中没有这个key会返回False

如果我想查找学号为20141346001的学生的姓名,这里介绍两种写法

print(student['20141346001'])
print(student.get('20141346001'))

以上两种写法当学号为20141346001的学生存在时都能查到,且查找结果相同,那么这两种写法区别是什么???

假如我查找一个不存在的学号如20141346009

print(student['20141346009'])

用这种方式系统会直接报错

print(student.get('20141346009'))

这种方式系统会显示None,所以还是推荐第二种写法。

以上基本操作的完整代码如下:

student = {'20141346001':'dinghaisheng',
           '20141346002':'wangzichun',
           '20141346003':'wangruiju',}
student['20141346003'] = 'weipengxiang'
#del student['20141346003']
#student.pop('20141346003')
student['20141346001'] = 'haisheng'
print('20141346001' in student )
#print(student['20141346009'])
print(student.get('20141346009'))
print(student)

以上操作的完整输出结果如下:

True
None

{'20141346001': 'haisheng', '20141346002': 'wangzichun', '20141346003': 'weipengxiang'}


---------------------------------------我是美丽惹人爱的分割线--------------------------------------------------------------

然后讲一些比较复杂的操作,毕竟在实际项目中,我们遇见的不可能是上面如此简单的字典数据,往往数据中还有嵌套,比如说下面一个很简单的嵌套

school = {'北京':{'重点学校':{'重点学校中的重点之一':'清华',
                             '重点学校中的重点之二':'北大'},
                  '211学校':'北京邮电大学',
                  '非211学校':'某些野鸡大学'},
          '上海':{'最为人知的大学':'上海交大',
                  '不太出名但是也很厉害':'同济大学',
                  '非211大学':'某些野鸡大学'},
          '浙江':{'我最想考的大学':'浙江大学',
                  '计算机很厉害的一个学校':'杭州电子科技大学',
                  '非211学校':'某些野鸡大学'}
          }

假如我想把‘’北大‘’这个数据取出来,我们怎么办?

print(school['北京']['重点学校']['重点学校中的重点之二'])

如果我想把‘北大 ’改为‘北京大学’怎么办?

school['北京']['重点学校']['重点学校中的重点之二'] = '北京大学'

其实跟我们之前讲的没有嵌套的操作方法是相差不多的,所以读者可以自己类比前面的增、删、改、查方法对多级嵌套进行操作

最后讲一下其他的操作,如果我想把这个字典数据key和value都输出,可以print(school.items()),比如我只想要key不要value

print(school.keys())

同样也有,如果我只要value不要key的方法

print(school.values())

然后讲一下setdefault方法,如果我写了代码(这里用第一个例子来说明)

print(student.setdefault('20141346001','whatever'))

因为在student中已经有学号为20141346001的学生了(这个学生名为haisheng),这是会输出haisheng

如果我这样写

print(student.setdefault('20141346008','whatever'))

在student中已经没有学号为20141346008的学生,这时会在student中添加一个新的元素,学号为20141346008,名字为whatever,并且返回新加入的value值,上面的语句输出的结果为whatever

最后一个问题,如何在字典中使用循环输出字典元素???这里介绍两种写法

方法一:

for i in student:
    print(i,student[i])

方法二:

for k,v in student.items():
    print(k,v)

这两个方法输出的结果都是

20141346001 haisheng
20141346002 wangzichun
20141346003 weipengxiang

20141346008 whatever

一定是有区别的,否则python创始人也不会把一个功能写两种方式,区别在于方法二是先将字典转变为列表,在去执行,所以如果数据量非常大的话,方法二的时间复杂度和空间复杂度需求更大,而方法一直接可以去数据,所以这里也推荐各位使用方法一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值