应该在 Python 中使用 None 作为字典键吗
None 可以用作 Python 中的字典键,因为它是可哈希对象。 但是,如果必须将字典转换为 JSON,则应避免使用 None 作为字典键,因为 JSON 对象中的所有键都必须是字符串。
my_dict = {'name': 'Alice', None: 30}
print(my_dict[None]) # ?️ 30
print(None in my_dict) # ?️ True
Python 中的大多数不可变内置对象都是可散列的,而可变对象是不可散列的。
可哈希对象包括 – None 、str 、int 、bool 、tuple 、frozenset。
不可散列的对象包括 – list 、dict 、set。
None 对象是可散列的,可以用作字典键。 但是,如果必须将字典转换为 JSON,则应避免使用它。
import json
my_dict = {'name': 'Jiyik', None: None}
print(my_dict) # ?️ {'name': 'Jiyik', None: None}
my_json = json.dumps(my_dict)
print(my_json) # ?️ '{"name": "Jiyik", "null": null}'
my_dict_again = json.loads(my_json)
print(my_dict_again) # ?️ {'name': 'Jiyik', 'null': None}
json.dumps 方法将 Python 对象转换为 JSON 格式的字符串。
json.loads 方法将 JSON 字符串解析为本机 Python 对象。
我们从一个具有 None 键和 None 值的 Python 对象开始。
当我们将对象转换为 JSON 时,键和值都被转换为 null。
当我们将 JSON 字符串解析为 Python 对象时,值被转换为 None,但键仍然是字符串 null。
将键转换为字符串后,解析 JSON 字符串将在 Python 对象中返回一个字符串键。
正如我们所期望的那样,尝试访问新字典中的 None 键会引发 KeyError ,因为该键现在已重命名为 null。
my_dict = {'name': 'Alice', 'null': None}
# ⛔️ KeyError: None
print(my_dict[None])
这就是为什么当你必须使用 json 模块时,你通常应该避免使用 None 作为字典键,因为它比它值得的麻烦更多。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。