python字典这种情况可能是什么原因?

作者站长头像
站长
· 阅读数 18

dict里面很奇怪的出现了一个空值,于是遍历一遍看看哪个出了问题:

for k,v in herb2class.items():
    if v=='':
        print('这个key是',k)

没想到结果是:

这个key是 None

???

None根本做不了key的呀。于是尝试了下herb2class[None],真不行。python字典这种情况可能是什么原因?那这是什么情况?

我知道解决方法可以直接略过这个k,v重新写入一个字典,但是就是想知道这种情况的原因?

回复
1个回答
avatar
test
2024-07-03

认真看一下你的 herb2class,打印出来看看, 肯定有key是None, value是''的元素。另外None是可以作为字典的key的。这个很好验证啊:

In [189]: b = {None: "demo"}

In [190]: b[None]
Out[190]: 'demo'

因为字典的key必须是一个可哈希的对象,诸如: None, int, float, str, tuple(ps:元素也必须是hashable), frozenset(ps:元素也必须是hashable), bytes等,或者你可以理解为任何实现了 __hash____eq__ 方法的对象,都可以作为字典的 key

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容