拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 修改字典中的值时出现型别错误

修改字典中的值时出现型别错误

白鹭 - 2022-03-11 2208 0 0

我制作了以下词典:

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 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *