从列表中创建对象

时间:2015-07-24 16:53:19

标签: python file object

我有一个从文本文件中读取行的程序,每行包含一个单词,例如价格或产品名称。程序读取所有行并将每个单词保存在列表中。文件中的每个产品包含三行,分别是:产品名称,价格和重量。所以在列表中将如下所示: ['Mjölk','15 kr','1升','Köttfärs','80 kr','1 kg','Morötter','20 kr','1 kg']

现在问题,我有班级:

if ( a < b )
{
    a = b;
    return ( 1 );
}
else
{
    return ( 0 );
}

我想从列表中的项目中创建Produkt对象,但我不知道如何遍历列表中的项目,然后将它们保存为对象。 我在想我会为这些对象制作一个列表,然后像: 对于listofprodukts中的项目:     objectlits.append(Produkt(item,item,item))

但这显然不起作用,任何人都知道如何做到这一点?

5 个答案:

答案 0 :(得分:2)

for i in range(len(listofprodukts)//3): #use xrange if it's python2
                                        #// -> floor division. Will silently chop off excess if len(listofprodukts) isn't a multiple of 3
    #print(listofprodukts[3*x:3*(x+1)]) # this expression makes chunks of three. Uncomment me to see :P
    objectlits.append(Produkt(*listofprodukts[3*x:3*(x+1)])) 
                      #       ^This * is for argument unpacking

我使用list slicing以三人一组的方式捆绑您的列表。因为我很懒,所以我使用argument unpacking将它们提供给您的对象创建者。

Admendum:我同意TextGeek,如果您要做这类事情,那么进行一些验证会很有用。

我个人把它放在模型中,但那只是我。

class Produkt:
    def __init__(self, produkt, pris, vikt):
        if not pris.endswith('kr'):
             raise ValueError("Invalid price {}. Prices should be in kr".format(pris)) 
            #raise ValueError, "Prices ..etc" for python 2
        self.produkt = produkt
        self.pris = pris
        self.vikt = vikt

答案 1 :(得分:1)

假设这三个属性始终按顺序排列,您可以简单地迭代每个第三个索引并对列表进行切片:

class Produkt:
    def __init__(self, produkt, pris, vikt):
        self.produkt = produkt
        self.pris = pris
        self.vikt = vikt

lst =  ['Mjölk', '15 kr', '1 liter', 'Köttfärs', '80 kr', '1 kg', 'Morötter', '20 kr', '1 kg']

produkts = []
for i in xrange(0,len(lst),3):  #in python 3.x use range() instead
    produkts.append(Produkt(lst[i], lst[i+1], lst[i+2]))

答案 2 :(得分:0)

如果你想循环尝试

For x in range(0 , 3):

您可以根据需要更改三次迭代次数。该示例将进行3次迭代。

答案 3 :(得分:0)

ProduktList =[]
for i in xrange(0,len(ListOfAllProuctsStuff),3)
  ProduktList.append(Produkt(ListOfAllProuctsStuff[i],ListOfAllProuctsStuff[i+1],ListOfAllProuctsStuff[i+2])

答案 4 :(得分:0)

假设属性顺序是一致的。

text_list = ['Mjolk','15 kr','1升','Kottfers','80 kr','1 kg','Morotter','20 kr','1 kg']

class Produkt:     def init (self,produkt,pris,vikt):         self.produkt = produkt         self.pris = pris         self.vikt = vikt

##make a representation of the Produkt object so we can verify we're getting what we want
def __repr__(self):
    return_string = "|{}, {}, {}|".format(self.produkt, self.pris, self.vikt)
    return(return_string)

object_list = [] ##创建一个空对象列表 index = 0 ##创建索引变量并将其设置为0

循环从文本文件

中删除的列表

而索引&lt; LEN(text_list):

##Use the index to get this Produkt's produkt, pris, and vikt
produkt = text_list[index]
pris = text_list[index+1]
vikt = text_list[index+2]

##Create the new Produkt object
new_product = Produkt(produkt, pris, vikt)

##add the new product to the object list
object_list.append(new_product)

##Set the index to the next produkt in the list
index += 3

print(object_list)##打印列表对象以确保我们有我们想要的东西