как искать переменную с помощью строки? / можете ли вы найти в классе переменную? - PullRequest
1 голос
/ 21 июня 2020

Я беру имя команды из файла, и мне нужен способ найти переменную с тем же именем, все переменные имени команды находятся в классе с именем team, есть ли способ найти переменную. Не знаю, проще ли было бы сделать со словарем. Python

class team()...

Burnley = team("Burnley",[1, 0, 0, 1], True)
Southampton = team("Southampton", [1,2,1,0,0,0,1], True)
Swansea = team("Swansea",[1,2,1,1,1,2,1,1,0,0,0,0,0,0,3],True)

df = pd.read_csv("2016-17 testing.csv")
df =df[["Date","HomeTeam","AwayTeam","FTHG","FTAG","FTR"]]

for game in df.iterrows():

    home_team = df["HomeTeam"]
    away_team = df["AwayTeam"]

Именно здесь мне нужно найти домашнюю команду и найти переменную. Для l oop используется, потому что мы будем просматривать список результатов и использовать эти данные. Спасибо

1 Ответ

0 голосов
/ 21 июня 2020

Лучше всего использовать словари.

teams = {
    'Burnley': team("Burnley",[1, 0, 0, 1], True),
    'Southampton': team("Southampton", [1,2,1,0,0,0,1], True),
    'Swansea': team("Swansea",[1,2,1,1,1,2,1,1,0,0,0,0,0,0,3], True)
}

# and then simply fetch values from it
Burnley = teams['Burnley']

...
for idx, game in df.iterrows():
    home_team_name = game["HomeTeam"]  # Burnley let's assume
    home_team = teams[home_team_name] 
    ...

НО, если вы действительно хотите, о чем спрашивает вопрос, продолжайте читать.

Допустим, у меня есть файл, sample.py

# sample.py
from pprint import pprint

variable = 'some value'
x = 20

pprint(globals())

Вывод:

$ python3 sample.py 
{'__annotations__': {},
 '__builtins__': <module 'builtins' (built-in)>,
 '__cached__': None,
 '__doc__': None,
 '__file__': 'sample.py',
 '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7fccad01eb80>,
 '__name__': '__main__',
 '__package__': None,
 '__spec__': None,
 'pprint': <function pprint at 0x7fccacefdf70>,
 'variable': 'some value',
 'x': 20}

Как видите, все определенные переменные будут добавлены к globals(), и это будет dict, что означает, что вы можете получить из него значения.

Поэтому вы можете сделать что-то вроде этого

# sample.py
variable = 'some value'
x = 20

variable_name = 'variable'
number_name = 'x'

value_of_variable = globals().get(variable_name)
print(f'Value of variable = {value_of_variable}')

value_of_x = globals().get(number_name)
print(f'Value of x = {value_of_x}')

Вывод:

Value of variable = some value
Value of x = 20

Итак, для вашего случая

...

for idx, game in df.iterrows():
    home_team_name = game["HomeTeam"]  # Burnley let's assume
    home_team = globals().get(home_team_name)  # would give you the value of the variable `Burnley` if it exists
    ...

Если вы прочитали весь ответ до этого момента, в качестве предложения я хотел бы добавить, что имена классов должны начинаться с заглавной буквы. class Team: вместо class team:

...