使用类函数创建/调用特定的字典键及其项

  • 本文关键字:字典 类函数 创建 调用 python
  • 更新时间 :
  • 英文 :


我正试图使用class属性来创建特定的字典并调用随机键/项。这是我目前的代码,它从字典理解中调用了一项特定的运动:

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))]))

上面的代码使我能够编写某项运动,并获得一个包含其条目的随机密钥。然而,这只适用于调用所需的运动。我希望代码也能用于选择特定的性别(genderChoice(,但我在实现程序时遇到了困难。这是我现在拥有的:

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))]))

我觉得我没有尽可能有效地完成这项工作。因此我提到了类属性。或者其他功能可能会更好。下面是我试图用一个类做这件事的一些非常糟糕的代码:

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)

如有任何帮助/指导,我们将不胜感激!

以下是所需的输出:

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

第一项,您有:

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

第二行应该使用=,而不是==

这里有一堆不必要的代码。这是你想要的:

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))

注意,"{}".format(sportChoce)sportChoice完全相同。请注意,您不需要创建列表索引的数组。让random.choice从列表中选择即可。

你可能会考虑创建一个class Person来保持他们的性别和运动,但这并不能真正让你受益匪浅。你仍然需要一个接一个地搜索它们。

最新更新