You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:58:37