Python的字典鍵名可以是哪些型別?

2021-08-31 03:22:25 字數 2355 閱讀 6896

今天看別人**時發現乙個事,就是把物件當作字典的鍵名,並且把兩個物件(類的例項)當作鍵名,然後去查了下:

鍵必須是不可變的,如字串,數字或元組。

但是網上卻沒有說其他型別可不可以,怎麼用的。我寫**試了下:

class

person

:def

__init__

(self, name)

: self.name = name

i =5

s ='abc'

t =(5,

'a')

p = person(

'lily'

)q = person(

'xiao'

)m =

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

print(d[p, q])

print(d[q, p])

two people: lily and xiao

traceback (most recent call last):

file "", line 1, in 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 print(d[q, p])

keyerror: (<__main__.person object at 0x000001803ef58940>, <__main__.person object at 0x000001803ef58668>)

(1)除了列表不能當作鍵名,其它都 可以,還可以放多個

(2)我是這樣理解的,列表是可變的,其他型別都是不可變的。物件作為鍵名時,實際傳入的是物件的位址,也是不可變的。

(3)放多個時不同順序時鍵不同。

------2020.04.07更新-----

感謝兩次網友的提醒。

(1)準確的說是列表、字典這種不可雜湊(unhashable)的型別不可當做鍵值,可雜湊的型別才可當作鍵。

終端可以是豐富多彩的 echo實用技巧

當我們編寫指令碼,或者寫一些 新手教學 的時候,經常會用到更改配置檔案的情況,比如在centos7中更換docker國內映象源,傳統的做法是,備份舊檔案,然後,vi開啟 etc docker daemon.json,輸入 如果善用echo,我們可以一行命令搞定echo etc docker daem...

python字典的作用 python字典詳解

字典的用途 字典是python提供的一種常用的資料結構,它用於存放具有對映關係的資料。字典相當於儲存了兩組資料,其中一組資料是關鍵資料,被稱為 key 另一組資料可通過 key 來訪問,被稱為 value。形象地看,字典中 key 和 value 的關聯關係如下圖所示 注意 key是十分關鍵的資料,...

python內建字典 python中字典的內建方法

python字典包含了以下內建方法 功能 字典 clear 函式用於刪除字典內所有元素。語法 dict.clear 引數 無 返回值 沒有任何返回值。dict print 字典長度 d len dict 字典長度 2 dict.clear print 字典刪除後長度 d len dict 字典刪除後...