有时候我们需要对一个字典进行各种计算,比如求取最大值、最小值以及排序等等。
如下是一个字典,我们之前会怎么做呢?
大概会是这样:
prices = {'a': 123, 'b': 23, 'c':293, 'd': 67}
min_value = 10000
for key in prices.keys():
if min_value > prices[key]:
min_value = prices[key]
通过遍历的方式来逐个进行比较,最终获取一个最小的值。
求取最小值:
但是在这一节里提供了一个比较优雅的方式,利用 zip 函数。
先说一下 zip() 函数,之前用到这个函数是两个长度相同的列表同时遍历,可以同时获取两个列表里相同位置的元素,在这里,是另一个用途:
可以看到返回的是一个元素,最小值以及相应的键
求最大值把 min() 函数改成 max() 即可。
排序:
要对数据进行排序,把 min() 函数改成 sorted() 即可:
注意:
zip() 创建了一个迭代器,它的内容只能被消费一次,使用过一次以后,需要重新在进行 zip() 迭代。
到了这里我在思考一个问题,如果只是想要获取字典里值的最小值,或者键的最小值我们可以直接这样实现:
min(prices) #键的最小值
min(prices.values()) #值的最小值
但是上述函数给我们返回的是 键和值 两者。,不同的需求,使用不同的方法。
如果我们的需求是获取 最小值的键 ,除了上述的 zip() 函数,我们还可以通过 lambda 函数来实现:
min(prices, key = lambda x: prices[x])
如果字典里有两个值相等的键值对,那么比较大小的依据则是键,一个字典里键肯定是不一样的,如下所示: