Python3.6+如何通过值所属类提供的sort_key方法对字典排序
错误原因
sorted(unsorted.items(), ...) 返回的迭代对象的每个元素都是(整数键, Dog实例)组成的二元组,原写法里直接把整个二元组赋值给了变量k,再用unsorted[k]取值时,二元组根本不是原字典的合法键,自然会触发KeyError。
修正代码
既然排序后已经拿到了完整的键值对,直接在字典推导式里拆包键和值即可,不需要再回原字典查询:
# 目标:先按name排序再按age排序,最终得到键顺序为113, 111, 114, 112的字典 result = {k: v for k, v in sorted(unsorted.items(), key=lambda i: i[1].sort_key())}
补充写法
如果你偏好先单独排序键的实现方式,也可以用下面的代码,效果完全一致:
sorted_keys = sorted(unsorted, key=lambda k: unsorted[k].sort_key()) result = {k: unsorted[k] for k in sorted_keys}
结果验证
遍历输出result的键即可确认顺序符合预期:
for k in result: print(k) # 输出顺序:113 111 114 112
内容的提问来源于stack exchange,提问作者Ed Noepel
相关产品推荐
相关产品推荐

