我制作了以下詞典:
client_dict = {'client 1':['ABC', 'EFG'], 'client 2':['MNO','XYZ'], 'client 3':['ZZZ']}
我想:從用戶那里獲取輸入,顯示客戶端的值,如果可以保持字典的當前狀態,如果不是,用戶可以更改給定客戶端的值。為此,我進行了以下操作:
x = client_dict[input('Enter the client name:\n')]
print(x)
y = input('if ok enter y otherwise enter n:\n')
if y =='n':
lst = []
for i in range(len(x)):
x[i] = input('enter the correct header:\n')
lst.append(x[i])
client_dict[x] = lst
else:
pass
假設在第一個輸入中我輸入client 1然后輸入n意思我想改變值。然后,演算法要求我兩次輸入所需的標頭(因為客戶端 1 有兩個值),對于我寫的第一個標頭hello和第二個我寫的標頭world。陣容如下:
Enter the client name:
client 1
['ABC', 'EFG']
if ok enter y otherwise enter n:
n
enter the correct header:
hello
enter the correct header:
world
我現在可以檢查我client_dict的修改為:
{'client 1': ['hello', 'world'],
'client 2': ['MNO', 'XYZ'],
'client 3': ['ZZZ']}
這意味著代碼做我想要的,但是當條件陳述句中的程序結束時,我也會收到以下錯誤:
TypeError: unhashable type: 'list'
來自這個:client_dict[x] = lst。所以我想知道我做錯了什么?盡管代碼有效,但在重寫字典時似乎存在一些問題?
uj5u.com熱心網友回復:
我改變了你的代碼,試試這個:
client_dict = {'client 1':['ABC', 'EFG'], 'client 2':['MNO','XYZ'], 'client 3':['ZZZ']}
x = input('Enter the client name:\n')
print(client_dict[x])
y = input('if ok enter y otherwise enter n:\n')
if y == 'n':
for i in range(len(client_dict[x])):
client_dict[x][i] = input('enter the correct header:\n')
else:
pass
對不起,現在試試這個。已編輯
uj5u.com熱心網友回復:
我認為您不小心將值分配給 client_dict 中的鍵。就像在,您試圖說一個值 List 是它出錯的行上的新條目中的鍵。你可能想做這樣的事情:
client_dict["client1"] = x
但用代表該客戶名稱的變數替換“client1”。你可能錯誤地認為 x 是你的客戶的名字(也就是key),但它實際上等于這個字典條目的值,因為這行:
x = client_dict[input('Enter the client name:\n')]
這就是說“當我進入字典“client_dict”并訪問鍵(輸入()呼叫的結果)所在的位置時,將 x 分配給結果值”
用 kvp 寫出您的字典的含義可能會有所幫助:
鍵應該是:字串
值應該是:串列
然后,檢查您的代碼并考慮所有內容是什么型別。這是 Python 的一個問題,因為它很容易混淆每個變數應該表示的型別,因為它是動態型別的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/390222.html
