我制作了以下词典:
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 的一个问题,因为它很容易混淆每个变量应该表示的型别,因为它是动态型别的
0 评论