Python 如何使用字符串搜索变量?/你能在类中搜索变量吗?
我从一个文件中获取一个团队的名称,我需要一种方法来找到一个同名的变量,所有团队名称变量都在一个名为team的类下,是否有一种方法来搜索该变量。我不知道使用字典是否更容易。蟒蛇Python 如何使用字符串搜索变量?/你能在类中搜索变量吗?,python,python-3.x,pandas,class,for-loop,Python,Python 3.x,Pandas,Class,For Loop,我从一个文件中获取一个团队的名称,我需要一种方法来找到一个同名的变量,所有团队名称变量都在一个名为team的类下,是否有一种方法来搜索该变量。我不知道使用字典是否更容易。蟒蛇 class team()... Burnley = team("Burnley",[1, 0, 0, 1], True) Southampton = team("Southampton", [1,2,1,0,0,0,1], True) Swansea = team("Sw
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"]
在这里,我需要搜索主队并找到变量。之所以使用for循环,是因为我们将查看结果列表,并将这些数据用于某些用途。
谢谢最好的方法是使用字典
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}
Value of variable = some value
Value of x = 20
输出:
$ 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}
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
...
如果您已经阅读了到目前为止的全部答案,作为建议,我想补充一点,即类名应该以大写字母开头<代码>团队:而不是
团队:
最好的方法是使用字典
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}
Value of variable = some value
Value of x = 20
输出:
$ 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}
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
...
如果您已经阅读了到目前为止的全部答案,作为建议,我想补充一点,即类名应该以大写字母开头<代码>团队:而不是
团队:
使用字典将帮助您解决问题。另一种可能的方法是列出所有团队。然后,您可以在此列表中搜索名称与所需名称相等的团队。此外,以大写字母开头类名也是一种良好的做法。因此,它应该被命名为Team
@MoosaSaadat。这个列表听起来不错,我如何在列表中搜索主队名称?你能列出变量吗??我将改变这一点,我假设您的team
类有一个name
属性,该属性存储团队的名称:team(“Burnley”,“1,0,0,1],True)
。就像这里一样,您正在传递团队名称“Burnley”
。因此,一旦创建了团队列表,就可以检查team.name
是否与名称匹配。例如,teams=[team(“Burnley”[1,0,0,1],True),team(“Southampton”[1,2,1,0,0,0,1],True)]
对于团队中的t:。另一种可能的方法是列出所有团队。然后,您可以在此列表中搜索名称与所需名称相等的团队。此外,以大写字母开头类名也是一种良好的做法。因此,它应该被命名为Team
@MoosaSaadat。这个列表听起来不错,我如何在列表中搜索主队名称?你能列出变量吗??我将改变这一点,我假设您的team
类有一个name
属性,该属性存储团队的名称:team(“Burnley”,“1,0,0,1],True)
。就像这里一样,您正在传递团队名称“Burnley”
。因此,一旦创建了团队列表,就可以检查team.name
是否与名称匹配。例如,teams=[team(“Burnley”[1,0,0,1],True),team(“Southampton”[1,2,1,0,0,0,1],True)]
对于teams中的t:
如果t.name==“Burnley”:
谢谢你的解释,但当我尝试使用它时,我得到了一个('Series'对象是可变的,因此它们不能散列)错误,我不知道它看起来像什么,就是说,您尝试使用一个Series对象作为字典键。你能显示发生错误的行吗?home\u team=globals().get(home\u team)将df[“HomeTeam”]
更改为game[“HomeTeam”]
。这就是我在回答中所做的df[“HomeTeam”]
将给出一个pd.Series
对象,据我所知,该对象不是您想要的。我收到另一个错误,TypeError:元组索引必须是整数或切片,而不是str,代码是:df中的游戏。ItErrors():home\u team\u name=game[“HomeTeam”]home\u team=globals().get(home\u team\u name)错误在第2行print(home_team)谢谢你的解释,但是当我尝试使用它时,我得到了一个('Series'对象是可变的,因此它们不能散列)错误,我不知道它看起来像什么,就是,你尝试使用Series对象作为字典键。你能显示发生错误的行吗?home\u team=globals().get(home\u team)将df[“HomeTeam”]
更改为game[“HomeTeam”]
。这就是我在回答中所做的df[“HomeTeam”]
将给出一个pd.Series
对象,据我所知,该对象不是您想要的。我收到另一个错误,TypeError:元组索引必须是整数或切片,而不是str,代码是:df中的游戏。ItErrors():home\u team\u name=game[“HomeTeam”]home\u team=globals().get(home\u team\u name)错误出现在第2行打印(home_团队)