使用字典而不是 globals()
Using Dictionaries instead of globals()
我正在做一个关于检索股票信息的商业案例。老师使用下面的代码创建了带有股票信息的DataFrames。
#The tech stocks we'll use for this analysis
tech_list = ['AAPL','GOOG','MSFT','AMZN']
#Set up End and Start times for data grab
end = datetime.now()
start = datetime(end.year - 1,end.month,end.day)
#For loop for grabing yahoo finance data and setting as a dataframe
for stock in tech_list:
# Set DataFrame as the Stock Ticker
globals()[stock] = DataReader(stock,'yahoo',start,end)
他使用 globals()
通过 techstock 创建了 4 个数据帧。我在下面的问题中读到你也可以使用字典来达到同样的目的。
我的问题是我不明白答案中的这行代码:
frames = {i:dat for i, dat in data.groupby('Sport')}
谁能解释一下?
在这种情况下,frames
是使用 词典理解 构建的词典。调用 data.groupby()
是 returning 一对值,在理解中被称为 i
和 dat
,而符号 {i:dat for i, dat in ...}
正在构建一个新的使用 i
作为键,使用 dat
作为值,从所有这些对中提取字典。结果存储在frames
.
一般语法是(对于迭代器returns 2个元素的情况):
{key: value for key, value in iterator}
this question 的答案很好地解释了 python 中的迭代器是什么。通常(但不总是),当用于字典理解时,迭代器的 __next__()
方法将 return 两个元素。至少有一个元素必须是可散列的,以便它可以用作字典键。
iterator
不一定需要 return 两个元素(尽管这是一种常见的使用模式)。 This works:
print(dict([(i, chr(65+i)) for i in range(4)]))
{0 : 'A', 1 : 'B', 2 : 'C', 3 : 'D'}
并且还表明字典理解实际上只是使用与列表理解和dict()
方法相同的机制的特殊语法,这就是@Barmar的评论正在做:
frames = dict(data.groupby('Sport'))
在这种情况下,data.groupby()
需要 return 两个元素,顺序 很重要,因为它是 shorthand(大致)这个:
dict([(key, value) for key, value in data.groupby('Sport')])
我正在做一个关于检索股票信息的商业案例。老师使用下面的代码创建了带有股票信息的DataFrames。
#The tech stocks we'll use for this analysis
tech_list = ['AAPL','GOOG','MSFT','AMZN']
#Set up End and Start times for data grab
end = datetime.now()
start = datetime(end.year - 1,end.month,end.day)
#For loop for grabing yahoo finance data and setting as a dataframe
for stock in tech_list:
# Set DataFrame as the Stock Ticker
globals()[stock] = DataReader(stock,'yahoo',start,end)
他使用 globals()
通过 techstock 创建了 4 个数据帧。我在下面的问题中读到你也可以使用字典来达到同样的目的。
我的问题是我不明白答案中的这行代码:
frames = {i:dat for i, dat in data.groupby('Sport')}
谁能解释一下?
在这种情况下,frames
是使用 词典理解 构建的词典。调用 data.groupby()
是 returning 一对值,在理解中被称为 i
和 dat
,而符号 {i:dat for i, dat in ...}
正在构建一个新的使用 i
作为键,使用 dat
作为值,从所有这些对中提取字典。结果存储在frames
.
一般语法是(对于迭代器returns 2个元素的情况):
{key: value for key, value in iterator}
this question 的答案很好地解释了 python 中的迭代器是什么。通常(但不总是),当用于字典理解时,迭代器的 __next__()
方法将 return 两个元素。至少有一个元素必须是可散列的,以便它可以用作字典键。
iterator
不一定需要 return 两个元素(尽管这是一种常见的使用模式)。 This works:
print(dict([(i, chr(65+i)) for i in range(4)]))
{0 : 'A', 1 : 'B', 2 : 'C', 3 : 'D'}
并且还表明字典理解实际上只是使用与列表理解和dict()
方法相同的机制的特殊语法,这就是@Barmar的评论正在做:
frames = dict(data.groupby('Sport'))
在这种情况下,data.groupby()
需要 return 两个元素,顺序 很重要,因为它是 shorthand(大致)这个:
dict([(key, value) for key, value in data.groupby('Sport')])