类型错误:不可散列的类型:字典中的“列表”

实现函数 consolidate,它在星形参数中接受零个或多个序列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


我怎样才能解决这个问题?


繁花不似锦
浏览 134回答 3
3回答

德玛西亚99

你打错字了,应该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 di调用类似seq=> 之类的东西可能会更好for seq in seqs。

慕姐8265434

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]))PS 调试时尝试打印中间结果。这对于追踪问题非常有用。

慕桂英4014372

您可以考虑使用 的子类dict,Counter它是为用例而设计的,如下所示:from collections import Counterdef 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}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python