我能';在python字典中,无法使用key获取值

我能';在python字典中,无法使用key获取值,python,dictionary,keras,Python,Dictionary,Keras,我正在使用基于keras的“Matchzoo”文本检索库。我想使用经过训练的结果,但它是字典,我无法使用显示的键获得值 训练完模特后, >>> history = model.fit_generator(train_generator, epochs=1, callbacks=[evaluate], workers=5, use_multiprocessing=False) Epoch 1/1 17/17 [==============================] - 1

我正在使用基于keras的“Matchzoo”文本检索库。我想使用经过训练的结果,但它是字典,我无法使用显示的键获得值

训练完模特后,

>>> history = model.fit_generator(train_generator, epochs=1, callbacks=[evaluate], workers=5, use_multiprocessing=False)
Epoch 1/1
17/17 [==============================] - 1s 84ms/step - loss: 1.0864
Validation: normalized_discounted_cumulative_gain@3(0.0): 0.03594548089735716 - normalized_discounted_cumulative_gain@5(0.0): 0.04159539212363794 - mean_average_precision(0.0): 0.044539607256746286
结果出现在
history.history
dictionary中

>>> history.history
{'loss': [1.2375952883301495],
 mean_average_precision(0.0): [0.02962496886265635],
 normalized_discounted_cumulative_gain@3(0.0): [0.018740542440172665],
 normalized_discounted_cumulative_gain@5(0.0): [0.027987588892336258]}
有4把钥匙,当我检查字典的钥匙时,我能看到它们

>>> history.history.keys()
dict_keys(['loss', normalized_discounted_cumulative_gain@3(0.0), normalized_discounted_cumulative_gain@5(0.0), mean_average_precision(0.0)])
但是当我尝试使用它们时,我不能

>>> history.history[normalized_discounted_cumulative_gain@3(0.0)]
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-36-9526d848c6d7> in <module>()
----> 1 history.history[normalized_discounted_cumulative_gain@3(0.0)]

NameError: name 'normalized_discounted_cumulative_gain' is not defined
>>历史记录。历史记录[标准化\u折扣\u累计_gain@3(0.0)]
---------------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
在()
---->1历史记录。历史记录[标准化\u折扣\u累计_gain@3(0.0)]
NameError:未定义名称“标准化\折扣\累积\收益”
我不明白的是我能用一些钥匙,但不是全部

>>> history.history['loss']
[1.0869888107353283]
>>> history.history[mean_average_precision(0.0)]
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-43-985db34a9846> in <module>()
----> 1 history.history[mean_average_precision(0.0)]

NameError: name 'mean_average_precision' is not defined
>历史记录。历史记录['loss']
[1.0869888107353283]
>>>历史记录。历史记录[平均精度(0.0)]
---------------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
在()
---->1历史记录。历史记录[平均精度(0.0)]
NameError:未定义名称“平均精度”
我想知道这是否是因为钥匙不是字符串,但它也不起作用

>>> history.history['mean_average_precision(0.0)']
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-43-985db34a9846> in <module>()
----> 1 history.history[mean_average_precision(0.0)]

NameError: name 'mean_average_precision' is not defined
>>历史记录。历史记录['mean\u average\u precision(0.0)]
---------------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
在()
---->1历史记录。历史记录[平均精度(0.0)]
NameError:未定义名称“平均精度”

有人能告诉我为什么以及如何解决这个问题吗?有什么我需要检查的吗?

正如您所说,可能是因为它们不是字符串。如果您确定这是它们的输入顺序,请尝试使用如下所示的键在字典中建立索引

history.history[list(history.history.keys())[2]]

等等

通过这样做,我们可以让计算机检索对象,从而避免猜测密钥的数据类型

最有可能的是,
normalized\u折扣\u累计_gain@3(0.0)
等不是字符串。它们可能是不同类型的对象。如果你想检查它到底是什么,你可以试试这个

type(list(history.history.keys())[2])

这将显示str表示“丢失”,因为它是一个字符串,而其他字符串表示其他字符串。如果您尝试这样做,请在注释中说明它的类型。

看起来它们不是字符串。。尝试以下操作:
history.history[列表(history.history.keys())[2]]
。这行得通吗?@Prateek哇,行得通……非常感谢。我为此花了几天的时间。@Prateek你能告诉我为什么这样做有效,但在我尝试用键获取值时却无效吗?我问这个问题是因为我真正想要的是使用这个键作为其他函数的参数值。你的回答也适用,但我只知道原因。很高兴你的回答适用。补充说,作为回答:)我检查了类型,发现它是一个类。(例如,结果是
matchzoo.metrics.normalized\u discounted\u cumulative\u gain.normalized discountedcumulativegain
)。但是,作为另一个函数的参数值,它似乎不起作用……但是您的回答非常有用。再次感谢:)
type(list(history.history.keys())[2])