2012-12-04 51 views
0

所以我有這個類叫做Data 而且這個類有兩個屬性; var_namesunits 是否可以將列表中的列表元素(屬於屬性units)附加到名爲var_names的列表中的每個元素?所以,當我提出一個新的對象稱爲myData,波紋管輸出是可能的(這樣子表[1,2,3,4]將關聯到id元素?爲列表值添加一個列表python

>>> myData=Data([[1,2,3,4],["a","b","c","d"], 
[2.3,2.1,2.5,3.1]],var_names=["id","name","length"]) 
>>> print myData 
id name length 
1 a 2.3 
2 b 2.1 
3 c 2.5 
4 d 3.1 

或者說是不可能的呢,只能在視覺上實現(格式化輸出方式)

+0

所以,基本上,它是'namedtuple'? – kreativitea

+0

我不認爲我明白... – user1509923

+0

[namedtuple](http://docs.python.org/2/library/collections.html#collections.namedtuple) – Xymostech

回答

0

如果我理解你的權利我想用字典來代替列表爲var_names應該做你想要什麼。使用collections.OrderedDict如果排序是非常重要的。

>>> import collections 
>>> var_names = collections.OrderedDict([('id',[1,2,3,4]), 
             ('name',['a','b','c','d']), 
             ('length',[2.3,2.1,2.5,3.1])]) 
>>> for name, value in var_names.items(): 
...  print name + ': ' + str(value) 
id: [1, 2, 3, 4] 
name: ['a', 'b', 'c', 'd'] 
length: [2.3, 2.1, 2.5, 3.1] 
2

你實際上需要namedtuple像其他人所建議的那樣。這裏有一個可能的實現你需要什麼

>>> class Data(object): 
    def __init__(self,*args,**kwargs): 
     args = args[0] 
     var_names = kwargs['var_names'] 
     self.var_names = namedtuple('Data',var_names) 
     self.units = [self.var_names(*e) for e in zip(*args)] 
    def __repr__(self): 
     fields = [e for e in vars(self.units[0])] 
     fmt_string = '{:^10}'*len(fields) 
     return '\n'.join(fmt_string.format(*units) for units in self.units) 


>>> myData=Data([[1,2,3,4],["a","b","c","d"], 
[2.3,2.1,2.5,3.1]],var_names=["id","name","length"]) 
>>> print myData 
    1   a  2.3  
    2   b  2.1  
    3   c  2.5  
    4   d  3.1  
>>> 
+0

這聽起來不錯,但是如果我想刪除'id'或'name' 因爲我一直在玩這個解決方案。但是我無法創建一個刪除選定變量值的函數,例如my_Data.del('lenght') 所以輸出將只包含id和name。 – user1509923