【问题标题】:How to append float to a list inside a dictionary如何将浮点数附加到字典内的列表中
【发布时间】:2014-02-01 06:48:46
【问题描述】:

对于像我这样的 Python 初学者来说是一个挑战,我需要创建包含浮点数列表字典的对象。我尝试了这个流程,对象似乎是在线创建的,但是代码在我尝试将更多值附加到已经创建的对象的那一行停止,告诉我:

AttributeError: 'float' 对象没有属性 '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

如果有人能发现错误,那就太好了,因为我现在盯着这段代码看了好几个小时..

【问题讨论】:

  • Wimp 类上创建add_value(def, value) 方法可能会更好。

标签: python dictionary append


【解决方案1】:

似乎您在第一个 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])]

【讨论】:

    【解决方案2】:

    wimp_data[mass].dN_dx[definitions[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/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])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-06
      • 1970-01-01
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 2023-04-04
      • 2012-11-19
      相关资源
      最近更新 更多