[英]Python how to delete a specific value from a dictionary key with multiple values?
[英]How to Create a Python Program that Outputs a Specific Key Value from a Python Dictionary that has Multiple Keys?
我有一个 Python 字典,其中包含多个具有特定值的键:
animal_dict =
{'Animal':
{0: 'Giraffe',
1: 'Kangaroo',
2: 'Koala',
3: 'Lion',
4: 'Walrus'},
'ID Number':
{0: '121',
1: '234',
2: '673',
3: '543',
4: '134'},
'Zoo Location':
{0: 'Chicago',
1: 'New York',
2: 'Seattle',
3: 'Tulsa',
4: 'Santa Monica'},
}
我需要弄清楚如何创建一个程序,该程序将输入其中一种动物的名称(键),然后输出特定于该动物(键)的 ID 号(值)。 如何执行该程序,并专门输出 ID 号而不是动物园位置?
我要做的是,如果用户输入动物名称,程序会检查它是否在字典中,如果是,它应该显示与该特定动物相关的信息。
这是我到目前为止所拥有的(不正确):
enter_animal_name = input("Enter Animal Name: ")
if enter_animal_name in animal_dict.values():
print("Animal ID Number: " + animal_dict[enter_animal_name])
else:
print("Animal does not exist in database")
我哪里错了? 谢谢你。
您可以使用以下代码片段来实现此目的
enter_animal_name = input("Enter Animal Name: ")
for key, value in animal_dict['Animal'].items():
if value == enter_animal_name:
print("Animal ID Number: ", animal_dict['ID Number'][key])
break
else:
print("Animal does not exist in database")
当用户输入动物名称时,它会在Animal
子字典中查找。 它逐个比较每个值,直到找到对应的值,在这种情况下,它将使用键打印 ID。 找到 id 后,循环中断,因为没有必要在字典中继续迭代。 如果没有找到,则执行for
循环的else
语句。
但是,我认为您不应该将数据存储在嵌套字典中。 这是一个使用 Animal 数据类列表的重写命题:
from dataclasses import dataclass
@dataclass
class Animal:
id: int
name: str
zoo_location: str
animals = [
Animal(id=0, name='Giraffe', zoo_location='Chicago'),
Animal(id=1, name='Kangaroo', zoo_location='New York'),
Animal(id=2, name='Koala', zoo_location='Seattle'),
Animal(id=3, name='Lion', zoo_location='Tulsa'),
Animal(id=4, name='Walrus', zoo_location='Santa Monica'),
]
enter_animal_name = input("Enter Animal Name: ")
for animal in animals:
if animal.name == enter_animal_name:
print("Animal ID Number: ", animal.id)
break
else:
print("Animal does not exist in database")
您对数据结构的解释似乎反映了很多混乱。 让我们看一个稍微小一点的 dict 版本,我会解释一下:
animal_dict = {
'Animal': {
0: 'Giraffe',
1: 'Kangaroo',
}
}
animal_dict
中的一个键是字符串'Animal'
。 它的值是内部字典{0: 'Giraffe', 1: 'Kangaroo'}
。 动物名称实际上是该内部字典中的值(数字是键)。
字典不容易搜索它们的值。 它们是为快速查找键而设计的,但是由于您的数据是向后组织的,因此进行所需的搜索会很不方便。 请注意,并非不可能,只是比基于字典的数据结构的效率要低得多。
更好的方法可能是重组数据,然后在新结构上进行搜索。 例如,这是一个字典理解,它将构建一个直接从动物名称映射到 ID 号的新字典:
good_mapping = {name: animal_dict['ID Number'][index]
for index, name in animal_dict['Animal'].items()}
您的查找代码将变为:
name = input("Enter Animal Name: ")
if name in good_mapping:
print("Animal ID Number: " + good_mapping[name])
else:
print("Animal does not exist in database")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.