2012-12-04 2 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

관련 문제