【问题标题】:Python SET to DICT results in unhashable type: 'set'Python SET 到 DICT 导致不可散列的类型:'set'
【发布时间】:2019-04-26 03:31:49
【问题描述】:

自从一周以来,我正在使用 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: unhashable type: 'set'

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

【问题讨论】:

    标签: python tensorflow types keras


    【解决方案1】:

    您可以使用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,但现在它会首先打印出一个有用的错误消息,指出字典中的错误值。

    【讨论】:

    • @Pyr0m4ni4c 我添加了一些关于您可能遇到的问题的信息,以及调试它的方法
    • 谢谢伙计。我感觉数据集可能有问题......但是在使用记事本进行一点正则表达式之后,我无法证明我的感觉。这应该对我有帮助。谢谢一千次:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 2021-08-10
    • 1970-01-01
    相关资源
    最近更新 更多