Python不可破坏类型错误
目前,我正在创建一个名为Python不可破坏类型错误,python,random,iteration,pagerank,Python,Random,Iteration,Pagerank,目前,我正在创建一个名为randomwalk的函数,该函数将集合边作为输入,一个传送概率a和一个正整数iters,并执行随机行走 从任何页面开始,函数将随机跟踪从一个页面到下一个页面的链接,在每次迭代时以概率a传送到完全随机的页面 它还应该存储所有访问的状态,并最终创建每个页面访问频率的柱状图。此直方图是randomwalk函数将返回的结果 这就是我到目前为止所做的,我得到了一个不可修复的列表类型错误。这是边的列表 edges =[[0,1], [1,1], [2,0], [2,2], [2,3
randomwalk
的函数,该函数将集合边
作为输入,一个传送概率a
和一个正整数iters
,并执行随机行走
从任何页面开始,函数将随机跟踪从一个页面到下一个页面的链接,在每次迭代时以概率a
传送到完全随机的页面
它还应该存储所有访问的状态,并最终创建每个页面访问频率的柱状图。此直方图是randomwalk函数将返回的结果
这就是我到目前为止所做的,我得到了一个不可修复的列表类型错误。这是边的列表
edges =[[0,1], [1,1], [2,0], [2,2], [2,3], [3,3], [3,4], [4,6], [5,5], [6,6], [6,3]]
def randomWalk(edges, a ,iters):
pages = {edge[0] for edge in edges}
dict_edges = {}
for edge_from, edge_to in edges:
if edge_from not in dict_edges:
dict_edges[edge_from] = [edge_to]
else:
dict_edges[edge_from].append(edge_to)
current_page = random.choice(pages)
visit_counts_dictionary = {page:0 for page in pages}
visit_counts_dictionary[current_page] +=1
for _ in range(iters):
if random.uniform(0,1) < a:
current_page = random.choice(pages)
visit_counts_dictionary[current_page] += 1
else:
current_page = random.choice(dict_edges[current_page])
visit_counts_dictionary[current_page] += 1
print visit_counts_dictionary
print(randomWalk(edges, 0, 10))
edges=[[0,1]、[1,1]、[2,0]、[2,2]、[2,3]、[3,3]、[3,4]、[4,6]、[5,5]、[6,6]、[6,3]]
def随机行走(边缘、a、ITER):
pages={edge[0]表示边中的边}
dict_边={}
对于边中的边,从边到边:
如果边缘不在dict_边缘中:
dict_edges[edge_from]=[edge_to]
其他:
dict_edges[edge_from]。追加(edge_to)
当前页面=随机选择(页面)
访问_counts_dictionary={page:0表示页面中的页面}
访问字典[当前页面]+=1
对于范围内(iters):
如果随机均匀(0,1)
如何修复此问题?出现此错误的原因是您不能在python中使用
list
作为dict
中的键。使用元组
:
error_dict = {[1, 2]: "some_data"}
# >>> TypeError: unhashable type: 'list'
correct_dict = {(1, 2): "some_data"}
# no error
代码中的错误来自以下行:
pages = list({edges[0] for edge in edges})
您可能在边缘[0]
中出错,请将其更改为边缘[0]
:
pages = list({edge[0] for edge in edges})
你能编辑代码让我理解吗?谢谢,我明白了,我只是在努力想如何改变我函数中的pages行以使用元组?我做了改变,得到了下面的错误“set”对象不支持索引,我没有得到任何错误。发布更新的代码和示例函数调用。将
pages={edge[0]用于边中边}
更改为pages=list({edge[0]用于边中边})