NetworkX调用set_node_attributes传入dict报错unhashable type如何解决?
报错原因
你遇到的报错是NetworkX版本迭代导致的参数顺序变更引发的:
你参考的是旧版本NetworkX的文档,旧版本set_node_attributes的参数顺序为(图对象, 属性名, 属性值字典);但在NetworkX 2.1及之后的主流版本中,该方法的参数顺序调整为(图对象, 属性值字典, 属性名)。
你传参时把属性名和属性值字典的位置放反,函数会将你传入的字符串'degree_centrality'识别为要给所有节点统一赋值的常量,将后续传入的字典识别为属性名。而属性名要求是可哈希类型(字符串、数值等),字典属于不可哈希类型,因此触发TypeError: unhashable type: 'dict'报错。
正确使用方法
当前主流版本中,仅需要调换属性值字典和属性名的参数位置即可,示例如下:
# 度中心性属性赋值 degree_centrality_dict = nx.degree_centrality(G) nx.set_node_attributes(G, degree_centrality_dict, 'degree_centrality') # 特征向量中心性属性赋值 eigenvector_dict = nx.eigenvector_centrality(G) nx.set_node_attributes(G, eigenvector_dict, 'eigenvector')
赋值完成后可通过以下方式验证属性是否设置成功:
# 查看节点0的degree_centrality属性值 print(G.nodes[0]['degree_centrality'])
如果你使用的是2.0及之前的旧版本NetworkX,保持你原有的参数顺序即可正常运行。
内容的提问来源于stack exchange,提问作者Mittenchops
相关产品推荐
相关产品推荐

