Hoe door woordenboeken te zoeken?

Ik ben nieuw in Python-woordenboeken. Ik maak een eenvoudig programma met een woordenboek dat vier namen als sleutels en de respectieve leeftijden als waarden bevat. Wat ik probeer te doen is dat als de gebruiker de a-naam invoert, het programma controleert of het in het woordenboek staat en als dat zo is, het de informatie over die naam zou moeten tonen.

Dit is wat ik tot nu toe heb:

def main():
    people = {
        "Austin" : 25,
        "Martin" : 30,
        "Fred" : 21,
        "Saul" : 50,
    }
    entry = input("Write the name of the person whose age you'd like to know, or write 'ALL' to see all names and ages: ")
    if entry == "ALL":
        for key, value in people.items():
            print ("Name: " + key)
            print ("Age: " + str(value) + "\n")
    elif people.insert(entry) == True:
                print ("It works")
main()

Ik heb geprobeerd het woordenboek te doorzoeken met .index()omdat ik weet dat het in lijsten wordt gebruikt, maar het werkte niet. Ik heb ook geprobeerd dit berichtte controleren, maar ik vond het niet nuttig .

Ik moet weten of er een functie is die dit kan.


Antwoord 1, autoriteit 100%

Als je wilt weten of keyeen sleutel is in people, kun je eenvoudig de uitdrukking key in peoplegebruiken, zoals in:

if key in people:

En om te testen of het geeneen sleutel is in people:

if key not in people:

Antwoord 2, autoriteit 24%

Eenvoudig genoeg

if entry in people:
    print ("Name: " + entry)
    print ("Age: " + str(people[entry]) + "\n")

Antwoord 3, autoriteit 14%

U kunt rechtstreeks naar de waarden verwijzen. Bijvoorbeeld:

>>> people = {
... "Austun": 25,
... "Martin": 30}
>>> people["Austun"]

Of je kunt people.get(<Some Person>, <value if not found>)gebruiken.


Antwoord 4, autoriteit 14%

Python ondersteunt ook enumerate om het dictaat te herhalen.

for index, key in enumerate(people):
    print index, key, people[key]

Antwoord 5, autoriteit 5%

Je kunt dit maken:

#!/usr/bin/env python3    
people = {
    'guilherme': 20,
    'spike': 5
}
entry = input("Write the name of the person whose age you'd like to know, or write 'ALL' to see all names and ages: ")
if entry == 'ALL':
    for key in people.keys():
        print ('Name: {} Age: {}'.format(key, people[key]))
if entry in people:
    print ('{} has {} years old.'.format(entry, people[entry]))
else:
    # you can to create a new registry or show error warning message here.
    print('Not found {}.'.format(entry))

Antwoord 6

Van alle antwoorden hier, waarom niet:

try:
    age = people[person_name]
except KeyError:
    print('{0} is not in dictionary.'.format(person_name))

De Canonical Way om te testen of iets in een woordenboek in Python zit, is om er toegang toe te hebben en de mislukking te verwerken – Het is gemakkelijker om om vergeving te vragen dan toestemming (EAFP) .


Antwoord 7

Een mogelijke oplossing:

people = {"Austin" : 25,"Martin" : 30,"Fred" : 21,"Saul" : 50,}
entry =raw_input ("Write the name of the person whose age you'd like 
to know, or write 'ALL' to see all names and ages: ")
if entry == 'ALL':
    for key in people.keys():
        print(people[key])
else:
    if entry in people:
        print(people[entry])

Other episodes