簡體   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