[英]TypeError: unhashable type: 'dict' in python
盡管我從未在代碼中的任何地方使用字典,但我還是收到有關字典的錯誤消息
這是我的代碼:
mm=[]
soln=[]
for i in range(len(momvec)):
string = str(momvec[i])
num = string[2:]
mm.append(Symbol('x'+num))
print num
print mm
soln.append(solve(mom[i]-momvec[i],mm))
print type(MFK[0])
for m in range(0,len(MFK)):
for i in range(0,len(mm)):
print MFK[m]
MFK[m]= Subs(MFK[m],mm[i], soln[i]).doit()
我想做的是用mm
所指示的內容反復用soln
的內容替換MFK
列表中的某些項目。
追溯:
Traceback (most recent call last):
File "MEA.py", line 313, in <module>
MFK_final(numMoments)
File "MEA.py", line 242, in MFK_final
MFK[m]= Subs(MFK[m],mm[i], soln[i]).doit()
File "/cluster/soft/linux64/epd/lib/python2.7/site-packages/sympy/core/function.py", line 1270, in __new__
pts = sorted(set(point), key=default_sort_key)
TypeError: unhashable type: 'dict'
mom,momevec和MFK的值分別為:
[x2 - y_0**2]
[ym2]
[-2*c_0*y_0*(y_0 - 1) - 2*c_0*(-y_0**2 + yx1*(y_0**2/yx1 + 1)) + 2*c_1*(0.5*c_2 - 0.5*y_0), 4.0*c_0*y_0**2 - 4.0*c_0*y_0 + 2.0*c_1*c_2 - 2.0*c_1*y_0 - (-y_0**2 + yx1*(y_0**2/yx1 + 1))*(8.0*c_0*y_0 - 8.0*c_0 + 2.0*c_1)]
將輸出打印到屏幕上,好像第一個循環運行正常,然后在標題中引發錯誤。 有誰知道我該怎么解決?
非常感謝
根據您的描述,我無法重現您的錯誤。 也就是說,我制作了一個Python文件:
from sympy import *
x2 = Symbol("x2")
y_0 = Symbol("y_0")
ym2 = Symbol("ym2")
c_0 = Symbol("c_0")
c_1 = Symbol("c_1")
c_2 = Symbol("c_2")
yx1 = Symbol("yx1")
mom = [x2 - y_0**2]
momvec = [ym2]
MFK = [-2*c_0*y_0*(y_0 - 1) - 2*c_0*(-y_0**2 + yx1*(y_0**2/yx1 + 1)) + 2*c_1*(0.5*c_2 - 0.5*y_0), 4.0*c_0*y_0**2 - 4.0*c_0*y_0 + 2.0*c_1*c_2 - 2.0*c_1*y_0 - (-y_0**2 + yx1*(y_0**2/yx1 + 1))*(8.0*c_0*y_0 - 8.0*c_0 + 2.0*c_1)]
mm=[]
soln=[]
for i in range(len(momvec)):
string = str(momvec[i])
num = string[2:]
mm.append(Symbol('x'+num))
print num
print mm
soln.append(solve(mom[i]-momvec[i],mm))
print type(MFK[0])
for m in range(0,len(MFK)):
for i in range(0,len(mm)):
print MFK[m]
MFK[m]= Subs(MFK[m],mm[i], soln[i]).doit()
它只是輸出
2
[x2]
<class 'sympy.core.add.Add'>
-2*c_0*y_0*(y_0 - 1) - 2*c_0*(-y_0**2 + yx1*(y_0**2/yx1 + 1)) + 2*c_1*(0.5*c_2 - 0.5*y_0)
4.0*c_0*y_0**2 - 4.0*c_0*y_0 + 2.0*c_1*c_2 - 2.0*c_1*y_0 - (-y_0**2 + yx1*(y_0**2/yx1 + 1))*(8.0*c_0*y_0 - 8.0*c_0 + 2.0*c_1)
沒有任何錯誤或回溯。
但是,如果您確實在代碼中找到了隱藏字典的出現點,則字典不應該是可哈希的(因此可用作其他字典中的鍵)是因為它們是可變的。 如果使用一個作為鍵,然后在其結構的某個深處更改值,則可能會出現奇怪的x != x
樣式錯誤。 您可以使用可哈希的凍結字典來修復此類錯誤...
您的soln[i]
是一本字典,但它必須是一個SymPy表達式(您計划將其替換為MFK[m]
代替mm[i]
表達式)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.