如何按字典值排序列表?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
相关产品推荐
相关产品推荐

