Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python不可破坏类型错误_Python_Random_Iteration_Pagerank - Fatal编程技术网

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]用于边中边})