Python SET to DICT导致无法散列的类型:“ set”

时间:2018-11-23 13:58:30

标签: python tensorflow types keras

自从一个星期以来,我正在使用python + tensorflow建立机器学习的知识。我的主要目标是启动和运行keras演示的教程,所以我自己对python的介绍是使这些加载功能正常工作,因为我被困在防火墙后面并且无法下载pip。 现在我遇到了一个问题,这使我失去了理智。 目前,我正在进行基本的回归分析,就像https://www.tensorflow.org/tutorials/keras/basic_text_classification一样-将整数转换回单词

稍作修改,其他所有教程都可以正常工作,但这使我发疯。

def get_word_index(path='training\imdb_word_index.json'):
with open('training\imdb_word_index.json') as f: 
    json1_str = f.read()
    json1_data = json.loads(json1_str)
    return dict(json1_data)

这段代码打开数据集,并将其作为字典返回。 内容如下:

"the":1402

就是这样。 我试图扭转它,因为内置功能似乎没有按预期工作。 现在我发现的最佳实践是 TypeError: unhashable type: 'list' when using built-in set function 这并没有太大帮助。 我的代码是

reverse_word_ind = {}
reverse_word_ind = dict.fromkeys(word_index.items(), 0)

这会引发错误:

  

TypeError:不可哈希类型:'set'

经过多次实验,将其手动翻转并进行类型转换以“指示”我的耐心失败了。 请帮助...

1 个答案:

答案 0 :(得分:0)

您可以使用dict comprehension反转字典:

reverse_word_ind = {v:k for k,v in word_index.items()}

不是每个字典都可以颠倒。这是因为虽然对可以作为字典值的对象的类型没有任何限制,但有restrictions as to what types can be keys

您得到的错误意味着字典中的至少一个值是一个集合,与您的期望相反。您可以通过在try...except子句中进行字典反转来调试正在发生的情况并找出错误的值:

reverse_word_ind = {}
for k,v in word_index.items():
    try:
        reverse_word_ind[v] = k
    except TypeError as e:
        print('could not reverse pair (%s, %s) of types (%s, %s)' % (k, v, type(k), type(v)))
        raise e

运行上面的代码应该会得到与之前相同的TypeError,但是现在它将首先打印出一条有用的错误消息,指出字典中的错误值。