TypeError:字典中不可损坏的类型:“列表”

2024-09-20 06:32:00 发布

您现在位置:Python中文网/ 问答频道 /正文

实现函数consolid,该函数接受星号参数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

我怎样才能解决这个问题


Tags: 函数代码innumberfor参数字典def
3条回答

您可以考虑使用这样的子类^{}^{},它是这样的用例:

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}

您有一个输入错误,应该是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

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]))

另外,调试时请尝试打印中间结果。它对于跟踪问题非常有用

相关问题 更多 >