Python按值排序字典时触发'str与int不可比较'TypeError如何解决
问题原因
你的报错是Python 3的类型比较限制导致的:你字典bad_functions的取值同时包含整数类型的并发数、字符串类型的"unreserved",Python 3不支持直接对字符串和整数做大小比较,因此直接用item[1]作为排序key时会触发类型冲突。
解决方案
sorted函数对元组做比较时会优先对比第一个元素,仅第一个元素相等时才会对比第二个元素,通过调整排序key返回二元组的方式,可以先区分值的类型再做比较,避免跨类型对比。根据你的排序需求可以选择以下两种方案:
方案1:所有unreserved条目排在最前,后续按并发数从小到大排序
bad_functions_sorted = {k: v for k, v in sorted(bad_functions.items(), key=lambda item: (0, item[1]) if isinstance(item[1], str) else (1, item[1]))}
方案2:所有unreserved条目排在最后,前面按并发数从小到大排序
bad_functions_sorted = {k: v for k, v in sorted(bad_functions.items(), key=lambda item: (1, item[1]) if isinstance(item[1], str) else (0, item[1]))}
兼容性提示
如果你的Python版本低于3.7,原生字典不保证保留插入顺序,需要使用OrderedDict存储排序后的结果:
from collections import OrderedDict bad_functions_sorted = OrderedDict(sorted(bad_functions.items(), key=lambda item: (0, item[1]) if isinstance(item[1], str) else (1, item[1])))
内容的提问来源于stack exchange,提问作者Eyal Solomon
相关产品推荐
相关产品推荐

