Есть ли лучший способ хранить эти данные, чем словарь словарей словарей? питон - PullRequest
3 голосов
/ 06 августа 2010

Я динамически создаю структуру данных, которая содержит информацию об автомобиле.Словарь выглядит примерно так:

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

Внешний словарь содержит марку автомобиля (toyota, bmw и т. Д.), Второй словарь содержит модель (prius, m5 и т. Д.), А внутренний словарь содержит сведения.из машины.Это лучший способ хранить эту информацию?

Я одновременно создаю структуру данных и получаю к ней доступ.Я не могу придумать другой способ сделать это, но код выглядит немного грязно с кучей:

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

Ответы [ 4 ]

12 голосов
/ 07 августа 2010

Как предположил Джастин, классы были бы идеальными.

Вы можете легко сделать что-то вроде этого:

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

НТН!

5 голосов
/ 06 августа 2010

Python имеет классов .Я не знаю, имеет ли это смысл с вашей структурой данных, но вы могли бы организовать все в коллекцию Car классов.

0 голосов
/ 07 августа 2010

Одна идея - сгладить вложенный словарь, снабженный многосегментным именем, разделенным точкой. Э.Г.

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', [])
0 голосов
/ 06 августа 2010

Почему бы не создать структуру JSON? Семантически вы могли бы получить немного больше выразительности, чем получить доступ к своим данным в качестве элементов словаря.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...