实施功能合并,该函数接受星形参数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
我该如何解决?
答案 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。调试时尝试打印中间结果。这对于跟踪问题非常有用。