最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中TypeError:unhashable?type:'dict'錯(cuò)誤的解決辦法

 更新時(shí)間:2023年04月11日 10:53:28   作者:跡憶客  
這篇文章主要給大家介紹了關(guān)于Python中TypeError:unhashable?type:'dict'錯(cuò)誤的解決辦法,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Python “TypeError: unhashable type: ‘dict’ ” 發(fā)生在我們將字典用作另一個(gè)字典中的鍵或用作集合中的元素時(shí)。

要解決該錯(cuò)誤,需要改用 frozenset,或者在將字典用作鍵之前將其轉(zhuǎn)換為 JSON 字符串。

當(dāng)我們將字典用作另一個(gè)字典中的鍵時(shí),會(huì)發(fā)生錯(cuò)誤。

# ??? using dictionary as a key in a dictionary

# ?? TypeError: unhashable type: 'dict'
my_dict = {'name': 'Jiyik', {'country': 'China'}: 'address'}

或者當(dāng)我們使用字典作為 set 對(duì)象中的元素時(shí)。

# ??? 使用字典作為集合中的元素

# ?? TypeError: unhashable type: 'dict'
my_set = {{'name': 'Jiyik'}}

我們不能將字典用作字典中的鍵或集合中的元素,因?yàn)樽值鋵?duì)象是可變的和不可散列的。

將字典轉(zhuǎn)為JSON字符串解決報(bào)錯(cuò)

解決該錯(cuò)誤的一種方法是在將字典用作鍵之前將其轉(zhuǎn)換為 JSON 字符串。

import json

# ??? 將字典轉(zhuǎn)換為 JSON 字符串
my_json = json.dumps({'country': 'China'})

my_dict = {'name': 'Jiyik', my_json: 'address'}
print(my_dict)  # ??? {'name': 'Jiyik', '{"country": "China"}': 'address'}

# ??? 當(dāng)你必須訪問字典中的鍵時(shí)
print(my_dict[json.dumps({'country': 'Austria'})]) # ??? address

json.dumps 方法將 Python 對(duì)象轉(zhuǎn)換為 JSON 格式的字符串。 這是有效的,因?yàn)樽址遣豢勺兊暮涂缮⒘械摹?/p>

相反,json.loads 方法將 JSON 字符串解析為本機(jī) Python 對(duì)象,例如 my_dict = json.loads(my_json_str)。

使用 frozenset 解決錯(cuò)誤

解決錯(cuò)誤的另一種方法是使用 frozenset。

my_key = {'country': 'China'}
key = frozenset(my_key.items())
print(key)  # ??? frozenset({('country', 'China')})

my_dict = {'name': 'Jiyik', key: 'address'}


# ??? 當(dāng)我們必須訪問 key 時(shí)
print(my_dict[frozenset(my_key.items())])  # ??? 'address'

dict.items 方法返回字典項(xiàng)((鍵,值)對(duì))的新視圖。

# ??? dict_items([('name', 'jiyik'), ('age', 30)])
print({'name': 'jiyik', 'age': 30}.items())

我們使用字典的項(xiàng)目創(chuàng)建了一個(gè) frozenset,我們可以將其用作字典中的鍵(以及另一個(gè)集合中的元素)。

frozenset 是 Python 集合對(duì)象的不可變版本,因此它可以用作字典中的鍵或另一個(gè)集合中的元素。

請(qǐng)注意 ,我們必須使用相同的方法來訪問字典中的鍵。

我們可以將調(diào)用 frozenset(my_key.items()) 的結(jié)果存儲(chǔ)在變量中,并在設(shè)置或訪問字典中的鍵時(shí)重用 frozenset。

將字典轉(zhuǎn)換為元組以解決錯(cuò)誤

解決錯(cuò)誤的另一種方法是將字典轉(zhuǎn)換為元組。

dict_key = {'id': 1, 'country': 'China'}

# ? 轉(zhuǎn)換為元組
my_tuple = tuple(dict_key)
print(my_tuple)  # ??? ('id', 'country')

my_dict = {'name': 'Jiyik', my_tuple: 'address'}
print(my_dict)  # ??? {'name': 'Jiyik', ('id', 'country'): 'address'}

# ??? 當(dāng)你必須訪問字典中的鍵時(shí)
print(my_dict[my_tuple])  # ??? address

將字典轉(zhuǎn)換為元組時(shí),元組僅包含字典的鍵。

元組是不可變的,因此包含字典鍵的元組可以安全地用作另一個(gè)字典中的鍵。

使用一個(gè)字典作為另一個(gè)字典中的值

我們不能將一個(gè)字典用作另一個(gè)字典中的鍵,但可以將一個(gè)字典用作值。

dict_value = {'id': 1, 'country': 'China'}

my_dict = {'name': 'Jiyik', 'data': dict_value}

# ??? {'name': 'Jiyik', 'data': {'id': 1, 'country': 'China'}}
print(my_dict)

print(my_dict['data'])  # ??? {'id': 1, 'country': 'China'}

我們將一個(gè)字典設(shè)置為另一個(gè)字典中的值。

這是允許的,因?yàn)橄拗撇贿m用于字典值。

將一個(gè)字典的所有鍵值對(duì)添加到另一個(gè)字典

如果需要將一個(gè)字典的所有鍵值對(duì)添加到另一個(gè)字典,則可以使用 for 循環(huán)。

another_dict = {'id': 1, 'country': 'China'}

my_dict = {'name': 'Jiyik'}

for key, value in another_dict.items():
    my_dict[key] = value

# ??? {'name': 'Jiyik', 'id': 1, 'country': 'China'}
print(my_dict)

dict.items 方法返回字典項(xiàng)((鍵,值)對(duì))的新視圖。

my_dict = {'id': 1,  'name': 'Jiyik'}

# ??? dict_items([('id', 1), ('name', 'Jiyik')])
print(my_dict.items())

在每次迭代中,我們將鍵值對(duì)設(shè)置為另一個(gè)字典。

Python 中的可散列對(duì)象與不可散列對(duì)象

Python 中的大多數(shù)不可變內(nèi)置對(duì)象都是可散列的,而可變對(duì)象是不可散列的。

如果一個(gè)對(duì)象是可散列的,那么它可以用作字典中的鍵和集合中的元素,因?yàn)檫@些數(shù)據(jù)結(jié)構(gòu)在內(nèi)部使用散列值。

可哈希對(duì)象包括 - str 、int 、bool 、tuplefrozenset。

不可散列的對(duì)象包括 - listdict 、set

請(qǐng)注意,元組和凍結(jié)集僅在其元素可哈希時(shí)才可哈希。

檢查一個(gè)對(duì)象是否可散列

我們可以通過將對(duì)象傳遞給內(nèi)置的 hash() 函數(shù)來檢查對(duì)象是否可散列。

print(hash('jiyik.com'))  # ??? 4905958875846995527

# ?? TypeError: unhashable type: 'dict'
print(hash({'name': 'Jiyik'}))

Python TypeError unhashable type dict

散列函數(shù)返回傳入對(duì)象的散列值(如果有的話)。

哈希值是整數(shù),用于在字典查找期間比較字典鍵。

!> 可散列對(duì)象的散列值在其生命周期內(nèi)永遠(yuǎn)不會(huì)改變。 這就是為什么大多數(shù)不可變對(duì)象是可哈希的,而可變對(duì)象是不可哈希的。

像字典這樣的對(duì)象是可變的,因?yàn)樽值涞膬?nèi)容可以改變。

my_dict = {'name': 'Fql'}

my_dict['name'] = 'Jiyik'

print(my_dict) # ??? {'name': 'Jiyik'}

另一方面,包含原始值的 fronzenset 和元組對(duì)象是不可變的(和可散列的)。

字典由鍵索引,字典中的鍵可以是任何不可變類型,例如 字符串或數(shù)字。

如果元組包含字符串、數(shù)字或元組,則它們只能用作字典中的鍵。

如果 fronzenset 或元組包含可變對(duì)象(例如列表),則不能將其用作字典中的鍵或集合中的元素。

如果我們不確定變量存儲(chǔ)的對(duì)象類型,請(qǐng)使用 type() 函數(shù)。

my_dict = {'name': 'Jiyik'}

print(type(my_dict))  # ??? <class 'dict'>
print(isinstance(my_dict, dict))  # ??? True

my_str = 'jiyik.com'

print(type(my_str))  # ??? <class 'str'>
print(isinstance(my_str, str))  # ??? True

type 函數(shù)返回對(duì)象的類型。

如果傳入的對(duì)象是傳入類的實(shí)例或子類,則 isinstance 函數(shù)返回 True。

總結(jié)

Python “TypeError: unhashable type: ‘dict’ ” 發(fā)生在我們將字典用作另一個(gè)字典中的鍵或用作集合中的元素時(shí)。

要解決該錯(cuò)誤,請(qǐng)改用 frozenset,或者在將字典用作鍵之前將其轉(zhuǎn)換為 JSON 字符串。

到此這篇關(guān)于Python中TypeError:unhashable type:'dict'錯(cuò)誤的文章就介紹到這了,更多相關(guān)Python TypeError:unhashable type:dict內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python flask web服務(wù)實(shí)現(xiàn)更換默認(rèn)端口和IP的方法

    python flask web服務(wù)實(shí)現(xiàn)更換默認(rèn)端口和IP的方法

    今天小編就為大家分享一篇python flask web服務(wù)實(shí)現(xiàn)更換默認(rèn)端口和IP的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python日志通過不同的等級(jí)打印不同的顏色(示例代碼)

    python日志通過不同的等級(jí)打印不同的顏色(示例代碼)

    這篇文章主要介紹了python日志通過不同的等級(jí)打印不同的顏色,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 實(shí)例講解Python 迭代器與生成器

    實(shí)例講解Python 迭代器與生成器

    這篇文章主要介紹了Python 迭代器與生成器的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • python趣味挑戰(zhàn)之爬取天氣與微博熱搜并自動(dòng)發(fā)給微信好友

    python趣味挑戰(zhàn)之爬取天氣與微博熱搜并自動(dòng)發(fā)給微信好友

    忙著畢設(shè)與打游戲之余,突然想著寫個(gè)爬蟲練練手,想了想,就寫了一個(gè)爬蟲爬取“中國(guó)天氣網(wǎng)”與“微博熱搜”并定時(shí)發(fā)送給微信好友,放到服務(wù)器上運(yùn)行了幾天算是正常,需要的朋友可以參考下
    2021-05-05
  • TensorFlow安裝并在Pycharm搭建環(huán)境的詳細(xì)圖文教程

    TensorFlow安裝并在Pycharm搭建環(huán)境的詳細(xì)圖文教程

    今天動(dòng)手開始搭建TensorFlow開發(fā)環(huán)境,所以下面這篇文章主要給大家介紹了關(guān)于TensorFlow安裝并在Pycharm搭建環(huán)境的詳細(xì)圖文教程,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Django python雪花算法實(shí)現(xiàn)方式

    Django python雪花算法實(shí)現(xiàn)方式

    在Django項(xiàng)目中添加自定義模塊或應(yīng)用來封裝雪花算法,步驟包括創(chuàng)建應(yīng)用,編寫算法實(shí)現(xiàn)代碼至utils.py文件,及配置settings.py,此方法可方便在項(xiàng)目中隨處調(diào)用雪花算法,適用于需要唯一ID生成的場(chǎng)景
    2024-09-09
  • Python實(shí)現(xiàn)的讀取/更改/寫入xml文件操作示例

    Python實(shí)現(xiàn)的讀取/更改/寫入xml文件操作示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的讀取/更改/寫入xml文件操作,涉及Python針對(duì)xml文件的讀取、節(jié)點(diǎn)操作、寫入等相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-08-08
  • pandas條件組合篩選和按范圍篩選的示例代碼

    pandas條件組合篩選和按范圍篩選的示例代碼

    這篇文章主要介紹了pandas條件組合篩選和按范圍篩選的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python基本結(jié)構(gòu)之判斷語句的用法詳解

    Python基本結(jié)構(gòu)之判斷語句的用法詳解

    在程序的設(shè)計(jì)當(dāng)中,代碼并不是逐步按照順序進(jìn)行執(zhí)行的,在運(yùn)行到某一行代碼當(dāng)中,需要停下進(jìn)行判斷接下來將要運(yùn)行到那一個(gè)分支代碼,這種判斷就代表的是分支結(jié)構(gòu)。分支結(jié)構(gòu)是可以使用?if?語句來進(jìn)行判斷的,而我們本篇博客講的也是?if?語句,需要的可以了解一下
    2022-07-07
  • Python3利用print輸出帶顏色的彩色字體示例代碼

    Python3利用print輸出帶顏色的彩色字體示例代碼

    用Python寫命令行程序的時(shí)候,單一的輸出顏色太單調(diào)了,所以下面這篇文章主要給大家介紹了關(guān)于Python3利用print輸出帶顏色的彩色字體的相關(guān)資料,需要的朋友可以參考下
    2019-04-04

最新評(píng)論

西平县| 平江县| 大连市| 江山市| 竹溪县| 尼玛县| 泊头市| 彰武县| 绥滨县| 宝应县| 土默特右旗| 海丰县| 凤冈县| 新兴县| 铅山县| 大宁县| 尉犁县| 璧山县| 南城县| 巴东县| 昌图县| 镇原县| 滕州市| 北京市| 陆丰市| 榆社县| 阳朔县| 峨山| 鹤峰县| 开鲁县| 武鸣县| 湘西| 邵东县| 离岛区| 普陀区| 封开县| 台南市| 含山县| 梅州市| 金堂县| 平安县|