为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2023-12-08 17:14:45
实现函数 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 dprint(consolidate([1,2,3], [1,1,1], [2,4], [1]))错误:TypeError: unhashable type我怎样才能解决这个问题?

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

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


查看完整回答
反对 回复 2023-12-08
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

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


查看完整回答
反对 回复 2023-12-08
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

您可以考虑使用 的子类dictCounter它是为用例而设计的,如下所示:


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}


查看完整回答
反对 回复 2023-12-08

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号