亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

類型錯誤:不可散列的類型:字典中的“列表”

類型錯誤:不可散列的類型:字典中的“列表”

繁花不似錦 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 關注
  • 234 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號