Python 用户输入作为嵌套字典的查询
我有一个嵌套的字典,而不是一个硬编码的查询来查询ownername John,我想提示用户输入一个名称,只是为了测试它,我在被提示时键入John,程序崩溃了,错误是字符串索引必须是整数 下面的代码运行良好,并返回KittyPython 用户输入作为嵌套字典的查询,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我有一个嵌套的字典,而不是一个硬编码的查询来查询ownername John,我想提示用户输入一个名称,只是为了测试它,我在被提示时键入John,程序崩溃了,错误是字符串索引必须是整数 下面的代码运行良好,并返回Kitty John = { 1: {'name': 'Kitty', 'kind': 'cat'}, 2: {'name': 'Ruffle', 'kind': 'dog'}, 3: {'name': 'Bobby', 'kind':
John = { 1: {'name': 'Kitty', 'kind': 'cat'},
2: {'name': 'Ruffle', 'kind': 'dog'},
3: {'name': 'Bobby', 'kind': 'fish'}
}
petownername = John[1]['name']
print(petownername)
当我将所有者的名字硬编码为John,并用f字符串输入字典查询时,这也可以很好地工作
John = { 1: {'name': 'Kitty', 'kind': 'cat'},
2: {'name': 'Ruffle', 'kind': 'dog'},
3: {'name': 'Bobby', 'kind': 'fish'}
}
owner_name = John
petname = f"{owner_name[1]['name']}"
print(petname)
但是如上所述,当我添加新的用户输入时,它停止工作
John = { 1: {'name': 'Kitty', 'kind': 'cat'},
2: {'name': 'Ruffle','kind': 'dog'},
3: {'name': 'Bobby',' kind': 'fish'}
}
owner_name = str(input("Which pet owner do you want to look up?: "))
petname = f"{owner_name[1]['name']}"
print(petname)
我得到这个错误:
Which pet owner do you want to look up?: John
Traceback (most recent call last):
File "test3.py", line 9, in <module>
petname = f"{owner_name[1]['name']}"
TypeError: string indices must be integers
你想找哪个宠物主人?:约翰
回溯(最近一次呼叫最后一次):
文件“test3.py”,第9行,在
petname=f“{owner_name[1]['name']}”
TypeError:字符串索引必须是整数
所以,当我硬编码它并通过f字符串插入它时,它工作得很好,输入显然是一个字符串。你知道为什么它不能在用户提示下工作吗?
我是否需要以另一种方式存储并引用用户提示?它不起作用,因为在第二个代码段中,
owner\u name
是一个dict,而在第三个代码段中它是一个字符串——具体地说是owner\u name='John'
所以owner\u name[1]='o'
,和'o'['name']
引发TypeError
。f字符串是不相关的
要修复它,请使用一个以上级别的嵌套dict。看
顺便说一句,您可能希望使用列表,而不是以int作为键的dict
pet_owners = {
"John": [
{'name': 'Kitty', 'kind': 'cat'},
{'name': 'Ruffle', 'kind': 'dog'},
{'name': 'Bobby',' kind': 'fish'},
]
}
owner_name = input('Pet owner name: ')
petname = pet_owners[owner_name][0]['name'] # Note the 0 instead of 1
print(petname)
试运行:
宠物主人姓名:约翰
基蒂
另外,
str(input())
在Python 3中是多余的,因为input()
返回一个字符串。它不起作用,因为在第二个代码段中,owner\u name
是一个dict,而在第三个代码段中它是一个字符串——特别是owner\u name='John'
所以owner\u name[1]='o'
,和'o'['name']
引发了TypeError
。f字符串是不相关的
若要修复此问题,请再使用一级嵌套dict。请参阅
顺便说一句,您可能希望使用列表,而不是以int作为键的dict
pet_owners = {
"John": [
{'name': 'Kitty', 'kind': 'cat'},
{'name': 'Ruffle', 'kind': 'dog'},
{'name': 'Bobby',' kind': 'fish'},
]
}
owner_name = input('Pet owner name: ')
petname = pet_owners[owner_name][0]['name'] # Note the 0 instead of 1
print(petname)
试运行:
宠物主人姓名:约翰
基蒂
另外,
str(input())
在Python 3中是多余的,因为input()
返回一个字符串。当您执行owner\u name=John
时,您将owner\u name
设置为dict
而不是字符串。当您请求用户输入时,现在owner\u name
是字符串“John”
,而不是您试图查看的dict
。继续@RocketHazmat所说的,您可能需要另一个外部字典将所有者的名字映射到他们的字典。那么,为什么您在这里使用“f字符串”呢?您可以只做petname=owner\u name[1]['name']
。我对它进行了硬编码,以确定f字符串是否有效。我已经证明,我可以使用petname=f“{owner_name[1]['name']}正确地使用f字符串但是为什么不使用用户的输入呢?我不想硬编码用户输入,因为我计划创建更多的一个用户。@ DEV然后考虑@ sSHIAKANK124的建议并创建一个包含所有用户的外部字典。例如:<代码>用户= {“约翰”:{ 1:{名字〉:‘Kitty’,‘At'’:‘猫’} }。。当您执行owner\u name=John
操作时,您将owner\u name
设置为dict
而不是字符串。当您请求用户输入时,现在owner\u name
是字符串“John”
,而不是您试图查看的dict
。继续@RocketHazmat所说的,您可能需要另一个外部字典将所有者的名字映射到他们的字典。那么,为什么您在这里使用“f字符串”呢?您可以只做petname=owner\u name[1]['name']
。我对它进行了硬编码,以确定f字符串是否有效。我已经证明,我可以使用petname=f“{owner_name[1]['name']}正确地使用f字符串但是为什么不使用用户的输入呢?我不想硬编码用户输入,因为我计划创建更多的一个用户。@ DEV然后考虑@ sSHIAKANK124的建议并创建一个包含所有用户的外部字典。例如:<代码>用户= {“约翰”:{ 1:{名字〉:‘Kitty’,‘At'’:‘猫’} }//>。