在我们平常想要获取字典中value最大或者最小的值的时候,常常使用如下函数:
testDict = {"age1":18,"age2":20,"age2":6,"age2":100} v1 = max(testDict.values()) print(v1) #打印结果为100
这样已经达到了获取最大值的目的,但是这样就丢失了key。要如何保留key呢,这就需要用到zip函数
zip函数的作用是将两个序列以顺序对应起来,最后生成一个列表,列表的每一个元素为含有两个元素的元组,元组的两个元素为初始两个序列相同位置元素的对应。如下所示:
testList1 = ["age1","age2","age3","age4"] testList2 = [18,20,6,100] v2 = zip(testList1,testList2) #返回值是一个可迭代对象 v2 = list(v2) #将可迭代对象转换为一个列表,方便打印 print(v2) #打印结果为[('age1', 18), ('age2', 20), ('age3', 6), ('age4', 100)]
利用zip函数,我们来实现最初的需求“保留键的情况下取字典中最大的值”,如下代码所示
testDict = {"age1":18,"age2":20,"age3":6,"age4":100} v1 = zip(testDict.values(),testDict.keys()) #先打包 v2 = max(v1) #再比较 print(v2) #打印结果为(100, 'age4')
以上传入max的参数为有序类型,如果想往max参数中传入无序类型进行比较又如何进行呢。
还有一种配合max的第二个参数与lambda函数结合实现更为简洁高效的方法如下:
people = [ {"name":"张三","age":18}, {"name":"李四","age":100}, {"name":"王五","age":6}, {"name":"赵六","age":20}, ] v1 = max(people,key=lambda dic:dic["age"]) print(v1)