Python 3中含None与字符串的字典元组键排序问题求助
Python 3 中含 None 的元组排序异常修复
问题原因
Python 2 允许不同类型(如 NoneType 和 str)的隐式比较,但 Python 3 严格了类型校验,直接对包含 None 和字符串的元组排序会抛出 TypeError: '<' not supported between instances of 'str' and 'NoneType'。
修复方案
自定义排序的 key 函数,将元组中的所有 None 替换为可与字符串正常比较的占位符,确保排序时类型一致。以下两种方式可选:
方式1:让 None 排在所有字符串前面(用空字符串替换)
destObj = {('SVC_157', None): '05-04-2022', ('SVC_157', 'V1.0'): '06-07-2022', ('SVC_157', 'SMU', 'Windows 10 ARM64', None): '08-09-2022'} # 自定义key:遍历元组每个元素,None替换为空字符串 sorted_keys = sorted(destObj.keys(), key=lambda t: tuple('' if x is None else x for x in t)) for key in sorted_keys: print(key)
方式2:让 None 排在所有字符串后面(用超大Unicode字符替换)
import sys destObj = {('SVC_157', None): '05-04-2022', ('SVC_157', 'V1.0'): '06-07-2022', ('SVC_157', 'SMU', 'Windows 10 ARM64', None): '08-09-2022'} # 用最大Unicode字符作为占位符,确保None排在所有字符串之后 sorted_keys = sorted(destObj.keys(), key=lambda t: tuple(chr(sys.maxunicode) if x is None else x for x in t)) for key in sorted_keys: print(key)
说明
- 该方案支持任意长度的元组键,不管
None出现在元组的哪个位置,都能统一处理。 - 替换的占位符可根据排序需求调整,只要保证能与字符串正常比较即可。
内容的提问来源于stack exchange,提问作者Yash
相关产品推荐
相关产品推荐

