Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Using class function to create/call on specific dictionary key and their items

I am attempting to use the class property to create specific dictionaries and call on random key/items. Here’s my current code that calls on a specific sport from the dictionary comprehension:

import random

# list dictionary
result = {'Peter': ['Male', 'Basketball'], 'Carlos': ['Male', 'Tennis'], 'Angela': ['Female', 'Golf'], 'David': ['Male', 'Basketball'], 'Kaitlin': ['Female', 'Golf'], 'Marco': ['Male', 'Tennis'], 'Andrew': ['Male', 'Golf'], 'Carmen': ['Female', 'Basketball']}

#list desired sport
sportChoice = input("Enter desired sport workout: ")

# filter dictionary for the sportChoice variable
parsedData = [
    '\n'.join([f"Name: {name}", f"Gender: {info[0]}", f"Sport: {info[1]}"])
    for name, info in result.items()
    if info[1] == "{}".format(sportChoice)
]

# grab a random dictionary key and item from the filtered list
intList = []


for numbers in range(len(parsedData)):
    intList.append(numbers)
print(intList)
print(''.join(parsedData[int(random.choice(intList))]))

The code above enables me to write a certain sport and get a random key with it’s entries in it. However, this only works for calling on a desired sport. I’d like the code to work for choosing a specific gender (genderChoice) as well but I’m having trouble implementing into the program. Here’s what I have now:

import random

# list dictionary
result = {'Peter': ['Male', 'Basketball'], 'Carlos': ['Male', 'Tennis'], 'Angela': ['Female', 'Golf'], 'David': ['Male', 'Basketball'], 'Kaitlin': ['Female', 'Golf'], 'Marco': ['Male', 'Tennis'], 'Andrew': ['Male', 'Golf'], 'Carmen': ['Female', 'Basketball']}

# list desired sport
sportChoice = input("Enter desired sport workout: ")
genderChoice = input("Enter desired Gender. If no preference, leave blank: ")

# create if statement for choice of gender
if genderChoice == "":
    genderChoice == "Male"

# filter dictionary for the variable sportChoice
parsedData = [
    '\n'.join([f"Name: {name}", f"Gender: {info[0]}", f"Sport: {info[1]}"])
    for name, info in result.items()
    if info[1] == "{}".format(sportChoice)
]

# grab a random dictionary key and item from the filtered list
intList = []


for numbers in range(len(parsedData)):
    intList.append(numbers)
print(intList)
print(''.join(parsedData[int(random.choice(intList))]))

I feel I’m not doing this as efficiently as it could be. Hence me mentioning the class property. Or maybe some other function would work better. Here’s some really bad code of me attempting to do this with a class:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

result = {'Peter': ['Male', 'Basketball'], 'Carlos': ['Male', 'Tennis'], 'Angela': ['Female', 'Golf'], 'David': ['Male', 'Basketball'], 'Kaitlin': ['Female', 'Golf'], 'Marco': ['Male', 'Tennis'], 'Andrew': ['Male', 'Golf'], 'Carmen': ['Female', 'Basketball']}
intList = []

class CreateSportList():
    def sport(self):
        parsedData = [
            '\n'.join([f"Name: {name}", f"Gender: {info[0]}", f"Sport: {info[1]}"])
            for name, info in result.items()
            if info[1] == "{}".self

    for numbers in range(len(parsedData)):
        intList.append(numbers)
    print(intList)
    print(''.join(parsedData[int(random.choice(intList))]))

CreateSportList(Tennis, Female)

Any help/direction would be appreciated!

Here’s the desired output:

Enter desired sport workout: Golf
Enter desired Gender. If no preference, leave blank: Female
Name: Angela
Gender: Female
Sport: Golf

>Solution :

First item, you have:

if genderChoice == "":
    genderChoice == "Male"

That second line should use =, not ==.

You have a bunch of unnecessary code here. This does what you want:

import random

# Set up database.
result = {'Peter': ['Male', 'Basketball'], 'Carlos': ['Male', 'Tennis'], 'Angela': ['Female', 'Golf'], 'David': ['Male', 'Basketball'], 'Kaitlin': ['Female', 'Golf'], 'Marco': ['Male', 'Tennis'], 'Andrew': ['Male', 'Golf'], 'Carmen': ['Female', 'Basketball']}

# list desired sport
sportChoice = input("Enter desired sport workout: ")
genderChoice = input("Enter desired Gender. If no preference, leave blank: ")

if not genderChoice:
    genderChoice = "Male"

parsedData = [
    '\n'.join([f"Name: {name}", f"Gender: {info[0]}", f"Sport: {info[1]}"])
    for name, info in result.items()
    if info[1] == sportChoice and info[0] == genderChoice
]

print(random.choice(parsedData))

Note that "{}".format(sportChoce) is exactly the same as sportChoice. Note that you don’t need to create an array of list indexes. Just let random.choice pick from the list.

You MIGHT consider creating a class Person to hold their gender and sport, but that doesn’t really gain you very much. You’ll still need to search through them one by one.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading