浅谈Python的字典键名可以是哪些类型

作者:张欣-男 时间:2021-06-13 11:39:47 

目录
  • 1 键的类型,列表/字典不可以,其它都可以

  • 2 多个对象可当作键名,顺序不同时是不同的键

  • 3 结论【有误】:

今天看别人代码时发现一个事,就是把对象当作字典的键名,并且把两个对象(类的实例)当作键名,然后去查了下:

键必须是不可变的,如字符串,数字或元组。

1 键的类型,列表/字典不可以,其它都可以

但是网上却没有说其他类型可不可以,怎么用的。我写代码试了下:


class Person:
   def __init__(self, name):
       self.name = name

i = 5
s = 'abc'
t = (5,'a')
p = Person('Lily')
q = Person('xiao')
m = {'a':1, 'b':10}
lst = [1,2,3]

d = {}
d[i] = 'five'
d[s] = 'ABC'
d[t] = 'five-a'
d[p] = 'name:Lily'
# d[lst] = 'list : 1,2,3'
# TypeError: unhashable type: 'list'
d[p, q] = 'two people: Lily and xiao'
d[i,s,t,p,q] = 'all in key'

for k, v in d.items():
   print(k, '=>', v)

输出结果:

5 => five
abc => ABC
(5, 'a') => five-a
<__main__.Person object at 0x000001803EEF27F0> => name:Lily
(<__main__.Person object at 0x000001803EEF27F0>, <__main__.Person object at 0x000001803EEF28D0>) => two people: Lily and xiao
(5, 'abc', (5, 'a'), <__main__.Person object at 0x000001803EEF27F0>, <__main__.Person object at 0x000001803EEF28D0>) => all in key

2 多个对象可当作键名,顺序不同时是不同的键


print(d[p, q])
print(d[q, p])

输出:

two people: Lily and xiao
Traceback (most recent call last):

  File "<ipython-input-15-12aff481ab93>", line 1, in <module>
    runfile('C:/Users/Xpeng/.spyder-py3/temp.py', wdir='C:/Users/Xpeng/.spyder-py3')

  File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
    execfile(filename, namespace)

  File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/Xpeng/.spyder-py3/temp.py", line 37, in <module>
    print(d[q, p])

KeyError: (<__main__.Person object at 0x000001803EF58940>, <__main__.Person object at 0x000001803EF58668>)

3 结论【有误】:

(1)除了列表不能当作键名,其它都 可以,还可以放多个。
(2)我是这样理解的,列表是可变的,其他类型都是不可变的。对象作为键名时,实际传入的是对象的地址,也是不可变的。
(3)放多个时不同顺序时键不同。

------2020.04.07更新-----
感谢两次网友的提醒。
(1)准确的说是列表、字典这种不可哈希(unhashable)的类型不可当做键值,可哈希的类型才可当作键。

来源:https://blog.csdn.net/sdlypyzq/article/details/83785033

标签:Python,字典,键名
0
投稿

猜你喜欢

  • js获取select标签选中值的两种方式

    2024-04-19 09:50:18
  • PyQt5每天必学之带有标签的复选框

    2021-04-30 05:27:06
  • tkinter自定义下拉多选框问题

    2022-09-27 06:40:00
  • Python实战使用XPath采集数据示例解析

    2022-02-25 09:00:24
  • Sql Server 2008完全卸载方法(其他版本类似)第1/2页

    2024-01-14 01:20:09
  • mysql简单实现查询结果添加序列号的方法

    2024-01-26 11:33:56
  • PIL对上传到Django的图片进行处理并保存的实例

    2023-04-03 12:40:04
  • vue实现拖拽交换位置

    2024-04-30 08:45:51
  • Python读取hdf文件并转化为tiff格式输出

    2021-02-22 18:59:56
  • 记一次python 内存泄漏问题及解决过程

    2021-06-18 17:28:14
  • python使用Matplotlib改变坐标轴的默认位置

    2021-08-06 00:27:42
  • Python实现用户登录并且输入错误三次后锁定该用户

    2022-07-28 12:02:47
  • numpy中的掩码数组的使用

    2022-10-19 23:36:46
  • Python 编码处理-str与Unicode的区别

    2021-04-15 15:38:43
  • python 合并多个excel中同名的sheet

    2023-06-06 08:34:27
  • Python基础教程之异常处理详解

    2022-06-10 07:52:17
  • Python装饰器用法实例总结

    2022-09-27 01:26:23
  • Javascript的常规数组和关联数组对比小结

    2024-04-28 09:47:29
  • 实现一个完整的Node.js RESTful API的示例

    2024-05-13 09:35:35
  • php递归删除目录与文件的方法

    2023-09-12 02:02:02
  • asp之家 网络编程 m.aspxhome.com