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

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

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

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

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

當我們將字典用作另一個字典中的鍵時,會發(fā)生錯誤。

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

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

或者當我們使用字典作為 set 對象中的元素時。

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

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

我們不能將字典用作字典中的鍵或集合中的元素,因為字典對象是可變的和不可散列的。

將字典轉為JSON字符串解決報錯

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

import json

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

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

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

json.dumps 方法將 Python 對象轉換為 JSON 格式的字符串。 這是有效的,因為字符串是不可變的和可散列的。

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

使用 frozenset 解決錯誤

解決錯誤的另一種方法是使用 frozenset。

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

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


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

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

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

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

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

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

我們可以將調用 frozenset(my_key.items()) 的結果存儲在變量中,并在設置或訪問字典中的鍵時重用 frozenset。

將字典轉換為元組以解決錯誤

解決錯誤的另一種方法是將字典轉換為元組。

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

# ? 轉換為元組
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'}

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

將字典轉換為元組時,元組僅包含字典的鍵。

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

使用一個字典作為另一個字典中的值

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

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'}

我們將一個字典設置為另一個字典中的值。

這是允許的,因為限制不適用于字典值。

將一個字典的所有鍵值對添加到另一個字典

如果需要將一個字典的所有鍵值對添加到另一個字典,則可以使用 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 方法返回字典項((鍵,值)對)的新視圖。

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

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

在每次迭代中,我們將鍵值對設置為另一個字典。

Python 中的可散列對象與不可散列對象

Python 中的大多數不可變內置對象都是可散列的,而可變對象是不可散列的。

如果一個對象是可散列的,那么它可以用作字典中的鍵和集合中的元素,因為這些數據結構在內部使用散列值。

可哈希對象包括 - strint 、booltuple 、frozenset

不可散列的對象包括 - list 、dictset。

請注意,元組和凍結集僅在其元素可哈希時才可哈希。

檢查一個對象是否可散列

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

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

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

Python TypeError unhashable type dict

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

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

!> 可散列對象的散列值在其生命周期內永遠不會改變。 這就是為什么大多數不可變對象是可哈希的,而可變對象是不可哈希的。

像字典這樣的對象是可變的,因為字典的內容可以改變。

my_dict = {'name': 'Fql'}

my_dict['name'] = 'Jiyik'

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

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

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

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

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

如果我們不確定變量存儲的對象類型,請使用 type() 函數。

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 函數返回對象的類型。

如果傳入的對象是傳入類的實例或子類,則 isinstance 函數返回 True。

總結

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

要解決該錯誤,請改用 frozenset,或者在將字典用作鍵之前將其轉換為 JSON 字符串。

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

相關文章

  • tensorflow2.0如何實現cnn的圖像識別

    tensorflow2.0如何實現cnn的圖像識別

    這篇文章主要介紹了tensorflow2.0如何實現cnn的圖像識別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • python返回數組的索引實例

    python返回數組的索引實例

    今天小編就為大家分享一篇python返回數組的索引實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python使用urlretrieve實現直接遠程下載圖片的示例代碼

    Python使用urlretrieve實現直接遠程下載圖片的示例代碼

    這篇文章主要介紹了Python使用urlretrieve實現直接遠程下載圖片的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Python 實現購物商城,含有用戶入口和商家入口的示例

    Python 實現購物商城,含有用戶入口和商家入口的示例

    下面小編就為大家?guī)硪黄狿ython 實現購物商城,含有用戶入口和商家入口的示例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Python3實現個位數字和十位數字對調, 其乘積不變

    Python3實現個位數字和十位數字對調, 其乘積不變

    這篇文章主要介紹了Python3實現個位數字和十位數字對調, 其乘積不變,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python集合用法實例分析

    python集合用法實例分析

    這篇文章主要介紹了python集合用法,較為詳細的分析了Python中集合的常見用法,需要的朋友可以參考下
    2015-05-05
  • Python史上最全種類數據庫操作方法分享

    Python史上最全種類數據庫操作方法分享

    本文將詳細探討如何在Python中連接全種類數據庫以及實現相應的CRUD(創(chuàng)建,讀取,更新,刪除)操作,文中的示例代碼講解詳細,需要的可以參考一下
    2023-07-07
  • Python可視化學習之matplotlib內置單顏色

    Python可視化學習之matplotlib內置單顏色

    這篇文章主要為大家介紹了Python matplotlib中支持的顏色格式及內置的單顏色色號的匯總,文中的示例代碼講解詳細,需要的可以參考一下
    2022-02-02
  • pandas Dataframe行列讀取的實例

    pandas Dataframe行列讀取的實例

    今天小編就為大家分享一篇pandas Dataframe行列讀取的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 如何用Python 實現全連接神經網絡(Multi-layer Perceptron)

    如何用Python 實現全連接神經網絡(Multi-layer Perceptron)

    這篇文章主要介紹了如何用Python 實現全連接神經網絡(Multi-layer Perceptron),幫助大家更好的進行機器學習,感興趣的朋友可以了解下
    2020-10-10

最新評論