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

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

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

繁花不似锦 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
  • 3 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信