如何用Python的map()与sorted()处理三角形字典列表生成排序元组列表?
如何用map()和sorted()处理字典列表生成排序后的元组列表
嘿,我来帮你搞定这个问题!你已经找对方向了——用map()来处理每个字典,再用sorted()排序,咱们一步步来拆解:
第一步:用map()转换字典为目标元组
map()需要一个处理函数和可迭代对象,这里我们可以用lambda匿名函数来提取每个字典里的name、base和height:
- lambda函数接收每个三角形字典作为参数
- 调用给定的
hypotenuse()函数,传入base和height计算斜边 - 返回包含
name和斜边长度的元组
代码示例:
processed_triangles = map(lambda tri: (tri["name"], hypotenuse(tri["base"], tri["height"])), triangles)
第二步:按斜边长度排序
默认情况下sorted()会按元组的第一个元素(名字)排序,这不是我们想要的。所以要通过key参数指定**按元组的第二个元素(斜边长度)**来排序:
hypotenuse_results = sorted(processed_triangles, key=lambda x: x[1])
完整代码整合
把所有步骤放在一起,运行后就能得到你想要的结果:
triangles = [{"name": "triangle1", "base":3, "height":4}, {"name": "triangle2", "base":5, "height":12}, {"name": "triangle3", "base":8, "height":15} ] def hypotenuse(base, height): hyp_sq = base**2 + height**2 return hyp_sq**(1.0/2.0) # 转换字典为元组 processed_triangles = map(lambda tri: (tri["name"], hypotenuse(tri["base"], tri["height"])), triangles) # 按斜边长度排序 hypotenuse_results = sorted(processed_triangles, key=lambda x: x[1]) print(hypotenuse_results) # 输出: [('triangle1', 5.0), ('triangle2', 13.0), ('triangle3', 17.0)]
小补充:如果需要整数结果
如果你希望斜边是整数(像示例里的5而不是5.0),可以在lambda里把计算结果转成整数:
processed_triangles = map(lambda tri: (tri["name"], int(hypotenuse(tri["base"], tri["height"]))), triangles)
这样输出就会是[('triangle1', 5), ('triangle2', 13), ('triangle3', 17)],和你理想的格式完全一致~
内容的提问来源于stack exchange,提问作者canecse
相关产品推荐
相关产品推荐

