欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Python的字典鍵名可以是哪些類型

 更新時間:2021年09月02日 10:41:20   作者:張欣-男  
本文主要介紹了Python的字典鍵名可以是哪些類型,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

今天看別人代碼時發(fā)現一個事,就是把對象當作字典的鍵名,并且把兩個對象(類的實例)當作鍵名,然后去查了下:

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

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)的類型不可當做鍵值,可哈希的類型才可當作鍵。

到此這篇關于淺談Python的字典鍵名可以是哪些類型的文章就介紹到這了,更多相關Python 字典鍵名 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 程序猿新手學習必備的Python工具整合

    程序猿新手學習必備的Python工具整合

    這篇文章主要介紹了程序猿新手必備的Python工具整合,Python 是一種開源編程語言,用于 Web 編程、數據科學、人工智能和許多科學應用
    2021-09-09
  • Python多進程池 multiprocessing Pool用法示例

    Python多進程池 multiprocessing Pool用法示例

    這篇文章主要介紹了Python多進程池 multiprocessing Pool用法,結合實例形式分析了多進程池 multiprocessing Pool相關概念、原理及簡單使用技巧,需要的朋友可以參考下
    2018-09-09
  • Python 經典貪心算法之Prim算法案例詳解

    Python 經典貪心算法之Prim算法案例詳解

    這篇文章主要介紹了Python 經典貪心算法之Prim算法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-09-09
  • Python設計模式之組合模式原理與用法實例分析

    Python設計模式之組合模式原理與用法實例分析

    這篇文章主要介紹了Python設計模式之組合模式,結合具體實例形式分析了Python組合模式的相關概念、原理、定義及使用方法,需要的朋友可以參考下
    2019-01-01
  • java判斷三位數的實例講解

    java判斷三位數的實例講解

    在本文里小編給大家整理了關于java怎么判斷三位數的實例方法以及要點總結,需要的朋友們跟著學習下。
    2019-06-06
  • Python多線程threading模塊用法實例分析

    Python多線程threading模塊用法實例分析

    這篇文章主要介紹了Python多線程threading模塊用法,結合實例形式分析了Python多線程threading模塊原理、功能、常見應用及相關操作注意事項,需要的朋友可以參考下
    2019-05-05
  • python創(chuàng)建進程fork用法

    python創(chuàng)建進程fork用法

    這篇文章主要介紹了python創(chuàng)建進程fork用法,實例分析了Python使用fork創(chuàng)建進程的使用方法,需要的朋友可以參考下
    2015-06-06
  • python關于多值參數的實例詳解

    python關于多值參數的實例詳解

    在本篇內容里小編給大家整理了一篇關于python關于多值參數的實例詳解內容,有興趣的朋友們可以學習下。
    2021-07-07
  • 利用soaplib搭建webservice詳細步驟和實例代碼

    利用soaplib搭建webservice詳細步驟和實例代碼

    這篇文章主要介紹了使用python soaplib搭建webservice詳細步驟和實例代碼,大家可以參考使用
    2013-11-11
  • Python中字典(dict)合并的四種方法總結

    Python中字典(dict)合并的四種方法總結

    在Python中將字典(dict)進行合并操作,是一個比較常見的問題。下面這篇文章主要給大家總結介紹了關于Python中字典(dict)合并的四種方法,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-08-08

最新評論