繁体   English   中英

如何创建从具有多个键的 Python 字典中输出特定键值的 Python 程序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM