2014-01-13 44 views
0

對於Python初學者(例如I)來說是一個挑戰,我需要創建包含浮點數值列表字典的對象。我想這個流程中,對象似乎在線創建,但代碼將停止在其中我嘗試更多的價值附加到一個已經創建的對象行,告訴我說:如何將float添加到字典中的列表

AttributeError: 'float' object has no attribute 'append'

這是一段代碼,我使用了這一使命:

class Wimp(object): 
    def __init__(self, mass, definitions): 
     self.mass = mass 
     self.dN_dx = {} 
     for definition in definitions: 
      self.dN_dx[definition] = [] 
      print definition, "added" 
     print "Wimp of mass", self.mass, "created." 

wimp_data = {} 

i=0 
    for mass in nu_e_mass: 
     if mass == nu_e_mass[i+1]: 
      #Saving the columns into arrays 
      if mass not in wimp_data: 
       wimp_data[mass] = Wimp(mass, definitions) 
       for j in range(1, len(definitions)): 
        wimp_data[mass].dN_dx[definitions[j]] = float(nu_e[j][i]) 
      else: 
       for j in range(1, len(definitions)): 
        wimp_data[mass].dN_dx[definitions[j]].append(nu_e[j][i]) 
      #print mass, "Same mass", nu_e_mass[i+1] 
      if i < (len(nu_e_mass)-2): 
       i = i+1 
     else: 
      #Integrating the columns and storing into Wimp class 
      #print mass, "Skipping to next mass", i, nu_e_mass[i+1] 
      i = i+1 

如果有人能找到這個錯誤會因爲我對這個代碼現在凝視時間是偉大的..

+0

你可能更好,如果你創建一個'add_value(DEF,值)'的'Wimp'類方法。 –

回答

3

好像你所定義的元素作爲浮點數,而不是列表,在第一個for循環中:

wimp_data[mass].dN_dx[definitions[j]] = float(nu_e[j][i]) 

所以很自然地,你不能在第二個中追加它。也許你的意思,使之包含單精度浮點數的列表:

wimp_data[mass].dN_dx[definitions[j]] = [float(nu_e[j][i])] 
+0

謝謝!現在我明白了.. – Ohm

2

wimp_data [質量] .dN_dx [定義[J] 浮點數,你創造了它。你可能想要的是:

wimp_data[mass].dN_dx[definitions[j]] = [] 
for j in range(1, len(definitions)): 
    wimp_data[mass].dN_dx[definitions[j]].append(float(nu_e[j][i])) 

給映射分配一個列表。

BTW:整個的更緊湊版本的if/else結構可能是:

 if mass not in wimp_data: 
      wimp_data[mass].dN_dx[definitions[j]] = [] 

     wimp_data[mass] = Wimp(mass, definitions) 
     for j in range(1, len(definitions)): 
       wimp_data[mass].dN_dx[definitions[j]].append(nu_e[j][i]) 
+0

感謝提示,確實整潔這種方式.. – Ohm

相關問題