簡體   English   中英

Python3 中不可散列列表的問題

[英]Problems with unhashable list in Python3

2 天前,我開始編寫一個字符串到十六進制的轉換器。 現在我有了那個代碼

HEXV = {"A":"41","a":"","B":"42","b":"","C":"43","c":"","D":"44","d":"","E":"45","e":"","F":"46","f":"","G":"47","g":"","H":"48","h":"","I":"49","i":"","J":"","j":"","K":"","k":"","L":"","l":"","M":"","m":"","N":"","n":"","O":"","o":"","P":"","p":"","Q":"","q":"","R":"","r":"","S":"","s":"","T":"","t":"","U":"","u":"","V":"","v":"","W":"","w":"","X":"","x":"","Y":"","y":"","Z":"","z":""}
CHAR = []

def loop():
    n = 0
    if CHAR[n] in HEXV:
        print(HEXV.get(CHAR[n]))
        n += 1

i = input(str('Insert Phrase:'))

l = list(i)
CHAR.append(l)

loop()

那個錯誤

C:\Users\Pc\AppData\Local\Programs\Python\Python39>C:/Users/Pc/AppData/Local/Programs/Python/Python39/python.exe "c:/Users/Pc/AppData/Local/Programs/Python/Python39/codes/HEXCODE Converter.py"
Insert Phrase:A
Traceback (most recent call last):
  File "c:\Users\Pc\AppData\Local\Programs\Python\Python39\codes\HEXCODE Converter.py", line 16, in <module>
    loop()
  File "c:\Users\Pc\AppData\Local\Programs\Python\Python39\codes\HEXCODE Converter.py", line 7, in loop     
    if CHAR[n] in HEXV:
TypeError: unhashable type: 'list'

無論我如何更改它都無法解決的代碼。 我已經瀏覽過了,但我無法解決它,如果你能幫助我,我將不勝感激

input返回一個字符串

> i = input('Insert Phrase:')
> Insert Phrase:A
> i
'A'

你列了一個清單

> l = list(i)
> l
['A']

然后將其附加到列表CHAR

> CHAR = []
> CHAR.append(l)
> CHAR
[['A']]

因此,在您的 function loop (順便說一句,實際上並沒有循環)中,您訪問了第 n 個值,該值始終為 0,因為您沒有循環:

> n = 0
> CHAR[n]
['A']

而且列表不可散列,所以

> CHAR[n] in HEXV
# which is actually this
> ['A'] in HEXV

給你錯誤。

你可以做的是使用CHAR.extend(l)而不是CHAR.append(l)或者只是將實際列表傳遞給循環。 但是您通常需要重新評估您的代碼,因為我不相信這會做您實際想要做的事情。

我將以一種有希望幫助您確定您所詢問的具體錯誤的方式回答,從表面上獲取您的代碼示例而不評論其整體邏輯或設計(因為這不是您問題的重點,我沒有關注它)。

CHAR是一個包含另一個列表 ( l ) 的列表,而HEXV是一個字典。 Python 列表數據類型確實不可哈希(參見 Python 文檔中的 dict here和 hashable here ),此外, HEXV中的每個鍵都是長度為 1 的字符串,而不是列表。 在檢查是否存在於 HEXV 中時,考慮僅使用CHAR[n]的第一個字符:

if CHAR[n][0] in HEXV:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM