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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:15:41