乐趣区

Python 基础起步 (八) 字典实用技巧大全,申精干货,必看!

Hello,同为小白的朋友们大家好,这期主要为大家带来有关字典的一些实用技巧。上篇笔记通过感人肺腑的老白让大家认识到了字典这么有用的数据类型,这一期让我们看看如何能更好的操作字典。
基础篇
下面我给大家来一个简单的字典方法汇总,诚意满满,希望大家喜欢,如果有错误或者遗漏希望大神可以补上~
创建字典,得到字典中的键值,新增,修改,删除,清空字典
stocks ={‘IBM’:146, # 创建字典
‘MSFT’:44,
‘MAOTAI’:1000}

stocks[‘IBM’] # 查询字典中的一个值 Out:146
stocks.get(‘MSFT’) # 查询字典中的一个值 Out:44
stocks.get(‘a’,’Not found’) # 查询字典中的一个值, 如果没有,返回 Not found
stocks[‘a’] # 抛出错误,因为字典中没有这个值
stocks[‘IBM’]=200 # 修改值
stocks[‘APPLE’]=400 # 新增键和值
stocks.update({‘APPLE’:900,
‘MAOTAI’:0,
‘MSFT’:250}) # 一次修改多个值

del stocks[‘APPLE’] # 删除一个值
stocks.pop[‘MAOTAI’] # 删除并返回删除的值
stocks.keys() # 获得字典的所有键
stocks.values() # 获得字典的所有值
stocks.items() # 获得字典的所有键和值,形式为 (key,value)

for k,v in stocks.items(): # 遍历一个字典,输出它的键和值
print(k,v)

stocks.clear() #清空一个字典,让字典为空
del stocks #直接删除一个字典
好啦,基础方法就这么多大概,这里创建了一个 stocks 字典用来表示股票名称和价钱,然后在基础上举例子的,有两点需要大家注意:

一次更新多个值的时候用 update() 方法会很方便
如果利用 dict[key] 的方式获取一个字典中不存在的值会报错,正确做法是用 get() 函数,效果好很多

奇淫巧技篇
创建字典歪门邪道之一: list + zip
除了常规的方式,还有很多其他方式可以帮助我们创建一个字典,比如我们这里想要创建一个字典来表示一个学生的各科成绩:
subject=[‘Math’,’Chinese’,’English’,’Science’,’Art’]
marks=[80,78,96,60,75]

final_result=dict(zip(subject,marks))
print(final_result.items())

Out: dict_items([(‘Math’, 80), (‘Chinese’, 78), (‘English’, 96), (‘Science’, 60), (‘Art’, 75)])

这里其实很容易看懂,我们把 subject 的所有值作为 key 值,把 marks 所有值看成 values 的值,最后用 Python 很常见的 zip 就啪啪啪的将他们合并啦,形成了一个新的字典 final_result
创建字典歪门邪道之二: 利用等号
上面的字典还可以通过这种形式来创建;
final_result= dict(Math=80,Chinese=78,English=96,Science=60,Art=75)
print(final_result.items())

Out: dict_items([(‘Math’, 80), (‘Chinese’, 78), (‘English’, 96), (‘Science’, 60), (‘Art’, 75)])

字典排序: 根据键值 Key 排序
还是使用上面已经建好的字典 final_result,我们先根据字典中的键值来排序:
print(sorted(final_result.items())) # 自动根据键的值从小到大或者按照 A - Z 排序
Out:[(‘Art’, 75), (‘Chinese’, 78), (‘English’, 96), (‘Math’, 80), (‘Science’, 60)]

换一种方式:
import operator
print(sorted(final_result.items(),key=operator.itemgetter(0)))
Out:[(‘Art’, 75), (‘Chinese’, 78), (‘English’, 96), (‘Math’, 80), (‘Science’, 60)]

或者用 lamba 函数秀一波:
print(sorted(final_result.items(),key=lambda x:x[0]))
Out:[(‘Art’, 75), (‘Chinese’, 78), (‘English’, 96), (‘Math’, 80), (‘Science’, 60)]
不要问我为什么,我也在学,但是我深知在 Python 编程装逼界你不用几个 lamba,reduce 什么的都不好意思和人打招呼,哈哈
如果我们想要实现根据键值倒序也很简单:
print(sorted(final_result.items(),reverse=True))
Out:[(‘Science’, 60), (‘Math’, 80), (‘English’, 96), (‘Chinese’, 78), (‘Art’, 75)]

字典排序: 根据 Value 值排序
其实大家看到了根据 key 的排序,也猜到了如何根据 value 排序:
print(sorted(final_result.items(),key=lambda x:x[1])) #根据分数排序,从低到高
Out:[(‘Science’, 60), (‘Art’, 75), (‘Chinese’, 78), (‘Math’, 80), (‘English’, 96)]

或者换一种方式:
import operator
print(sorted(final_result.items(),key=operator.itemgetter(1)))

Out:[(‘Science’, 60), (‘Art’, 75), (‘Chinese’, 78), (‘Math’, 80), (‘English’, 96)]

倒序也是类似:
print(sorted(final_result.items(),key=lambda kv:kv[1],reverse=True))
Out:[(‘English’, 96), (‘Math’, 80), (‘Chinese’, 78), (‘Art’, 75), (‘Science’, 60)]

这里我在 lamba 后面没有写 x,写了一个 kv,就是告诉大家这里是什么不太重要,先这么理解就行
获取字典的子集
我们将会一直使用上面的 final_result 字典来示范,这里如果我们想要得到这个学生成绩大于 70 分的字典子集应该怎么做呢,很简单:
final_result= dict(Math=80,Chinese=78,English=96,Science=60,Art=75)
above_seventy ={subject:mark for subject,mark in final_result.items() if mark >70}
print(above_seventy.items())

Out:dict_items([(‘Math’, 80), (‘Chinese’, 78), (‘English’, 96), (‘Art’, 75)])

交换字典中的 key 和 value 的值
这个小技巧可以这样实现:
exchange_key_value= dict(zip(final_result.values(),final_result.keys()))
print(exchange_key_value.items())

Out: dict_items([(80, ‘Math’), (78, ‘Chinese’), (96, ‘English’), (60, ‘Science’), (75, ‘Art’)])

获取字典最大值最小值
简直不要太简单呀:
print(“The best mark is {}”.format(max(final_result.values())))
print(“The worst mark is {}”.format(min(final_result.values())))

Out: The best mark is 96
The worst mark is 60
总结
没啥可说的啦,写了这么多,求老铁们双击 666 鼓励一波!!!!完结,撒花~

退出移动版