2014-01-13 2 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

Вы, вероятно, лучше, если вы создаете (DEF, значение) 'метод на класс' 'Wimp' в add_value , –

ответ

3

Похоже, вы определяете элемент как float, а не список, в первом цикле 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])) 

, чтобы присвоить список картографированию.

КСТАТИ: Более компактная версия в целом, если/иначе конструкция может быть:

 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

Смежные вопросы