TypeError:无法散列的类型:字典中的“列表”

时间:2020-10-21 06:03:52

标签: python

实施功能合并,该函数接受星形参数seqs中的零个或多个序列,并返回一个字典,其键由在这些序列中找到的值组成,该字典又映射为表示每个值多少次的数字出现在所有序列中。

例如consolidate([1,2,3], [1,1,1], [2,4], [1])应该返回字典{1: 5, 2: 2, 3: 1, 4: 1}

我的代码:

def consolidate(*seqs):
    d={}
    for i in seqs:              
        for number in seqs:   
            d[number]=d.get(number,0)+1   

    return d

print(consolidate([1,2,3], [1,1,1], [2,4], [1]))

错误:TypeError: unhashable type

我该如何解决?

3 个答案:

答案 0 :(得分:0)

您有错字,应该是binary,而不是for number in i。您当前正在尝试使用列表作为字典键。

for number in seqs

最好将def consolidate(*seqs): d = {} for i in seqs: for number in i: d[number] = d.get(number,0) + 1 return d 之类的东西称为i => seq

答案 1 :(得分:0)

您可以考虑使用dict的子类Counter,该子类是为用例设计的,如下所示:

from collections import Counter

def consolidate(*seq):
    return dict(Counter([x for l in seq for x in l]))

print(consolidate([1,2,3], [1,1,1], [2,4], [1]))

输出:

{1: 5, 2: 2, 3: 1, 4: 1}

答案 2 :(得分:0)

def consolidate(*seqs):

  d={} 
  for i in seqs:
    for number in i: # here is the problem, should be i not seqs
      d[number]=d.get(number,0)+1
  return d  

print(consolidate([1,2,3], [1,1,1], [2,4], [1]))

P.S。调试时尝试打印中间结果。这对于跟踪问题非常有用。