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

如何按字典值排序列表?Dijkstra路径列表顺序匹配咨询

问题解答:两个Python实用场景问题

问题1:如何根据字典的值对列表进行排序?

日常开发里常见两种情况,我分别给你拆解说明:

情况1:列表元素是字典,按字典中指定键的值排序

如果你的列表里装的是一个个字典,且这些字典都有共同的键(比如age、score这类),想要按这个键对应的值排序,直接用Python内置的sorted()函数,配合key参数就能搞定:

# 示例:按年龄排序人员列表
people = [
    {'name': 'Alice', 'age': 25},
    {'name': 'Bob', 'age': 20},
    {'name': 'Charlie', 'age': 30}
]
# 升序排序(默认)
sorted_by_age_asc = sorted(people, key=lambda x: x['age'])
# 降序排序,加上reverse=True参数
sorted_by_age_desc = sorted(people, key=lambda x: x['age'], reverse=True)

情况2:列表是字典的键,按字典对应的值排序

如果你的列表是字典的键集合,想按每个键对应的值来排序列表元素,同样用sorted()的key参数,传入lambda表达式提取字典值:

# 示例:按分数排序科目列表
score_map = {'math': 90, 'english': 85, 'science': 95}
subjects = ['math', 'english', 'science']
# 按分数从低到高排序
sorted_subjects_asc = sorted(subjects, key=lambda x: score_map[x])
# 按分数从高到低排序
sorted_subjects_desc = sorted(subjects, key=lambda x: score_map[x], reverse=True)

问题2:让路径坐标列表与输入路径顺序一致

先理清楚你的现有逻辑:你已经通过遍历boardPos,把每个位置(比如A2)映射到了对应的行列坐标,存在pos2Coord里,这一步是完全正确的。问题应该出在生成coordList的方式上——如果之前你是直接遍历pos2Coord的键值对,那得到的顺序会是boardPos的遍历顺序,而不是你需要的dijkstra路径顺序。

要让coordList的顺序和dijkstra路径完全匹配,只需要顺着dijkstra的路径顺序,逐个从pos2Coord里取出对应坐标就行,用列表推导式写起来特别简洁:

boardPos = [['F0','F1','F2','F3','F4'], ['E0','E1','E2','E3','E4'], ['D0','D1','D2','D3','D4'], ['C0','C1','C2','C3','C4'], ['B0','B1','B2','B3','B4'], ['A0','A1','A2','A3','A4']]
dijkstra = ['A2', 'B2', 'B1', 'B0', 'C0']
pos2Coord ={}

# 保留你的坐标映射构建逻辑
for iRow in range(len(boardPos)):
    for iCol in range(len(boardPos[iRow])):
        pos = boardPos[iRow][iCol]
        pos2Coord[pos] = (iRow, iCol)

# 按dijkstra路径顺序生成坐标列表
coordList = [pos2Coord[pos] for pos in dijkstra]

# 输出结果:[(5, 2), (4, 2), (4, 1), (4, 0), (3, 0)]
print(coordList)

这样生成的coordList,每个元素的顺序就和dijkstra输入的路径顺序完全一致了,完美匹配你的需求。

内容的提问来源于stack exchange,提问作者Luis Cazares

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:42:58