本帖最后由 hrpzcf 于 2022-7-7 12:59 编辑
是
不是
一步一步解释一下下面这个代码:
- for i in members:
- min(members[i].items(), key = lambda x:x[1])
复制代码
这个循环会执行 3 次 min 函数:
min(members["鱼C工作室"].items(), key = lambda x:x[1])
min(members["复仇者联盟"].items(), key = lambda x:x[1])
min(members["奥特曼家族"].items(), key = lambda x:x[1])
第一次:min(members["鱼C工作室"].items(), key = lambda x:x[1])
members["鱼C工作室"]的值就是{"小甲鱼": 83, "不二如是": 89, "二师兄": 64, "小师妹": 75, "鱼小二": 96}
members["鱼C工作室"].items()的值虽然不是列表,但是类似 [('小甲鱼', 83), ('不二如是', 89), ('二师兄', 64), ('小师妹', 75), ('鱼小二', 96)]
也就是说要取出[('小甲鱼', 83), ('不二如是', 89), ('二师兄', 64), ('小师妹', 75), ('鱼小二', 96)]中的最小值,
即 min([('小甲鱼', 83), ('不二如是', 89), ('二师兄', 64), ('小师妹', 75), ('鱼小二', 96)])
但是 min 不知道哪个是最小的,('小甲鱼', 83) 最小?还是 ('二师兄', 64) 最小?还是 ('小师妹', 75) 最小?min 不知道
这时候我们给 min 传入 key 参数: lambda x:x[1] ,告诉 min 按照 lambda x:x[1] 比较 ('小甲鱼', 83), ('不二如是', 89), ('二师兄', 64), ('小师妹', 75), ('鱼小二', 96) 这几个的大小,
lambda x:x[1] 是什么?lambda x:x[1] 可以看成
min 会分别把 [('小甲鱼', 83), ('不二如是', 89), ('二师兄', 64), ('小师妹', 75), ('鱼小二', 96)] 里的每一项 x 传入 func 函数,得到每一项的 x[1] 即每一项的第 2 个值:83, 89, 64, 75, 96
然后比较得出结果:第三项的第二个值:64 最小,所以 min 返回第三项 ('二师兄', 64)。
剩下的 members["复仇者联盟"] 和 members["奥特曼家族"] 同理。
所以 min(members["鱼C工作室"].items(), key = lambda x:x[1]) 只返回了一项 ('二师兄', 64),你为什么会觉得 min 是从小到大返回所有的项呢?