Python 不易损坏类型:';列表';在编字典时
我正在尝试编写一个程序,创建一个字典,其键是数字,其值是数字出现的次数,但我得到了以下消息:Python 不易损坏类型:';列表';在编字典时,python,list,dictionary,Python,List,Dictionary,我正在尝试编写一个程序,创建一个字典,其键是数字,其值是数字出现的次数,但我得到了以下消息: i是一个不可散列的列表,字典键必须是可散列的 由于您声称要查找数字,您可能想测试i的每个元素,而不是整个列表。您使用的是变量网格,因为它是一个列表,但它是一个列表列表。您应该迭代两次(您只在列表上迭代一次) 以下代码应该可以工作: from random import randint d={} grid = [[randint(1, 5)for j in range(5)] for i in range
i
是一个不可散列的列表,字典键必须是可散列的
由于您声称要查找数字,您可能想测试i
的每个元素,而不是整个列表。您使用的是变量网格,因为它是一个列表,但它是一个列表列表。您应该迭代两次(您只在列表上迭代一次)
以下代码应该可以工作:
from random import randint
d={}
grid = [[randint(1, 5)for j in range(5)] for i in range(5)]
print(grid)
for array in grid: # iterate over every list inside the list of lists
for element in array: # iterate over every element inside a list
if element in d: # check if element is a key in d
d[element]=d[element]+1
else:
d[element]=1
编辑:根据的建议,我将代码包括在defaultdicts中:
在defaultdicts中,您首先声明键的默认值
from random import randint
from collections import defaultdict
d = defaultdict(lambda: 0)
grid = [[randint(1, 5)for j in range(5)] for i in range(5)]
print(grid)
for array in grid:
for element in array:
d[element]=d[element]+1
r
未在此代码中定义。这是否回答了您的问题?您的错误再清楚不过了:当您检查如果r在d
中时,字典中的键需要是可散列的,i
是您在网格的每个项中生成的5个随机数的列表。你可以通过检查链接的问题来解决这个问题。将范围(5)中j的[randint(1,5)]
更改为元组将解决此问题,除非您打算检查列表列表,否则Vasco的答案更准确。使用defaultdict
将使此问题更加清晰。
from random import randint
d={}
grid = [[randint(1, 5)for j in range(5)] for i in range(5)]
print(grid)
for array in grid: # iterate over every list inside the list of lists
for element in array: # iterate over every element inside a list
if element in d: # check if element is a key in d
d[element]=d[element]+1
else:
d[element]=1
from random import randint
from collections import defaultdict
d = defaultdict(lambda: 0)
grid = [[randint(1, 5)for j in range(5)] for i in range(5)]
print(grid)
for array in grid:
for element in array:
d[element]=d[element]+1