2010-08-06 2 views
2

나는 자동차 정보를 보유하고있는 데이터 구조를 동적으로 생성하려고합니다.이 사전에 사전 데이터를 저장하는 더 좋은 방법이 있습니까? python

cars = {'toyota': {'prius': {'transmission':'automatic', 'mpg':30, 'misc':[]}}} 

가장 바깥 쪽 사전 자동차 브랜드 (도요타, BMW 등), 두 번째 사전 모델이 포함 포함 (프리우스, M5, 등)과 내부 사전의 세부 사항을 포함 : 사전은 다음과 같이 보입니다 차. 이 정보를 보유하는 가장 좋은 방법입니까?

저는 데이터 구조를 만들고 액세스하고 있습니다. 난 정말 그것을 할 수있는 또 다른 방법을 생각할 수 있지만, 코드의 무리와 함께 가지 지저분한 같습니다

cars['toyota'].setdefault('prius', {}).setdefault('misc', []).append('hello') 
+0

나는 그것이 지저분한의 종류가 보이는 것을 동의하지만, 난 그냥 ({ '디렉토리''dicts 및 목록의 튜플의 dicts의 재귀 튜플을 포함하는 알고리즘을 작성 : ({ '디렉토리'({}, [ ('file', 'file')}), 'dir': ({}, [ 'file'])}}, [ 'file' ])' –

+0

@Carson - 그것은 심한 구조입니다 ... 어떤 이유에서든지 다시 고려하지 않았습니까? –

+0

@Wayne 튜플 대신 클래스를 사용할 수는 있었지만 파일과 별도로 디렉터리를 만들고 싶었습니다. 대신 개체 전체를 인스턴스화하는 대신 튜플을 선택했습니다. 그리고 실제로 알고리즘은 구조가 복잡하지 않아서 꽤 멋지 네요. –

답변

0

가 왜 JSON 구조를 만들? 의미 적으로 사전 데이터로 데이터에 액세스하는 것보다는 표현력을 조금 더 확보 할 수 있습니다.

+0

JSON이 Lance가 실제로 원하는 것일 수는 없다고 생각합니다. –

5

파이썬은 classes입니다. 귀하의 데이터 구조에 적합한 지 모르겠지만 모든 것을 Car 클래스 모음으로 구성 할 수 있습니다.

11

저스틴이 제안했듯이 클래스가 이상적입니다.

는 쉽게 이런 식으로 뭔가를 할 수 :

class Car(object): 
    def __init__(self, make, model=None, trans=None, mpg=None, misc=None): 
     if make == 'Toyta' and model is None: 
      model = 'Prius' 
     self.make = make 
     self.model = model 
     self.transmission = trans 
     self.mpg = mpg 
     if misc is None: 
      self.misc = [] 
    #other class stuff here 
    def __str__(self): 
     return "Make: {make} Model: {model} Mpg: {mpg}".format(make=self.make, 
                   model=self.model, 
                   mpg=self.mpg) 
    def __repr__(self): 
     return str(self) 

cars = [Car('Toyota', 'Prius', 'Automatic', '30'), 
     Car('Mitsubishi', 'Echo LRX', 'Automatic', '20')] 

for car in cars: 
    print car 

HTH를!

+0

니스! 나는 이것을 투표하고 싶었다. 그러나 언젠가 내가 upvote에 한도에 이르렀 던 어느 날, 그들은 여전히 ​​나에게 3 회의 시간 후에 돌아 오기를 요구하고있다. 약간의 결함이 있습니다. –

+2

그리고 Python (및 유사한 언어)에 대한 좋은 점은 Lance가 동적으로 데이터 구조를 갖기를 원한다는 것입니다. 왜냐하면 동적으로 속성을 추가하고 제거 할 수 있기 때문입니다. – JAB

0

하나의 아이디어 - 마침표로 구분 된 다중 세그먼트 이름으로 키가 입력 된 중첩 사전을 병합합니다. 예 :

cars.setvalue('toyota.prius.transmission', 'automatic') 
cars.setvalue('toyota.prius.mpg', '30') 
cars.setvalue('toyota.prius.misc', []) 

cars.getvalue('toyota.prius.misc').append('hello') 

class Car: 
    def setvalue(self, key, value): 
     # parse the key and do your mess here, like 
     # cars['toyota'].setdefault('prius', {}).setdefault('misc', []) 
관련 문제