需要帮助来了解这一行代码(字典,键,熊猫,numpy)

时间:2018-11-26 00:41:47

标签: python

我正在尝试Google Crash Course学习TensorFlow和机器学习。 我无法理解他们的coding examples中的其中一行。

def my_input_fn(features, targets, batch_size=1, shuffle=True, num_epochs=None):
"""Trains a linear regression model of one feature.

Args:
  features: pandas DataFrame of features
  targets: pandas DataFrame of targets
  batch_size: Size of batches to be passed to the model
  shuffle: True or False. Whether to shuffle the data.
  num_epochs: Number of epochs for which data should be repeated. None = repeat indefinitely
Returns:
  Tuple of (features, labels) for next data batch
"""

# Convert pandas data into a dict of np arrays.
features = {key:np.array(value) for key,value in dict(features).items()}

我需要帮助来了解最后一行代码。

features = {key:np.array(value) for key,value in dict(features).items()}

I've researched dictionaries,目的是让我自己理解它,但是我仍然要掌握很多东西。我试图以一种我能理解的方式编写同一行代码:

np_dict_array = dict(features).items()

for key,value in np_dict_array:
    features += np_dict_array[key]

我认为我没有正确重写代码。具体来说,我需要帮助来了解这行代码的作用:

key:np.array(value)

如果任何人都可以解释该代码行的功能,或者(奖励积分)以新手友好的方式重写它,我将不胜感激!

3 个答案:

答案 0 :(得分:1)

  

features = {key:np.array(value)for key,dict(features).items()}中的值

它是dictionary comprehension。它将dict(features)中的所有值转换为Numpy数组。

  

键:np.array(值)

这是将键值对分配给字典的方式。

答案 1 :(得分:1)

这是一种“字典理解”-以列表理解为模型,但改为制作新字典。

features = {key:np.array(value) for key,value in dict(features).items()}

从内而外取物:

dict(features)    # make a dictionary from the `features` argument
    .items()      # make a list of (key,value) tuples
for key,value     # iterate on those tuples
np.array(value)   # make a numpy array from the value
key:...           # make a new entry in the new dictionary

总而言之,它会根据features创建一个字典,并确保每个项目的value是一个numpy数组。

fdict = dict(features)
adict = dict()   # empty dictionary
for key,value in fdict.items():
    adict[key] = np.array(value)

答案 2 :(得分:1)

备用语法:

features = {}
for key, value in dict(features).items():
    features[key] = np.array(value)

理解很普遍,因为它们将这种常见的模式减少到了一行。但是,有时随着复杂性的增加,尝试去做太多事情是很诱人的。