【问题标题】:Unhashable type list [duplicate]不可散列的类型列表[重复]
【发布时间】:2019-01-07 00:41:55
【问题描述】:

我们已经设置了S 的元组。

每个元组都是(string, string, list)

以下代码:

def f(entry_set, def_dict, S):
    for entry in entry_set:
        if entry[1] in def_dict:
            S.add((entry[0], entry[1], def_dict[entry[1]]),) // error

给出错误:TypeError: unhashable type: 'list'

def_dict 是使用附加列表的值构造的。


对于添加条目,是否使用散列来查找集合元素的唯一性?

【问题讨论】:

  • 你能包括一些输入和预期输出吗?
  • 集合实际上是没有值的字典,而字典实际上是哈希表,除非您可以对它们进行哈希处理,否则您不能将事物放入哈希表中。
  • 使用元组而不是列表。
  • @MisterMiyagi 我不能,因为我需要这个代码:def_dict[key].append(list_elem)。查询已编辑
  • 你是这样构建还是使用这个序列的?在前一种情况下,插入时将list 转换为tuple。在后一种情况下,恐怕没有任何意义 - set 是通过相等定义的,它会被更改元素破坏。

标签: python python-3.x collections


【解决方案1】:

list 是一个可变引用,因此不能散列,因为它引用了内存。如果您可以将列表转换为元组,则可以对它们进行哈希处理。

set((1, 2, [3, 4]))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-d0176c73c39f> in <module>()
----> 1 set((1, 2, [3, 4]))

TypeError: unhashable type: 'list'

相对于:

set((1, 2, (3, 4)))
{(3, 4), 1, 2}

【讨论】:

    猜你喜欢
    • 2015-07-05
    • 2017-07-11
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    相关资源
    最近更新 更多