Структуры данных Python, словарь? - PullRequest
2 голосов
/ 08 января 2010

Я надеюсь, что кто-нибудь может помочь. Я использую Python, и я хотел бы иметь возможность сделать следующее.

У меня есть набор объектов (например, фигур) и ряд команд для работы с этими объектами. Команды имеют формат командной строки, за которым следует переменное число параметров, которые могут быть строками или целыми числами

Например, форма 'Прямоугольник' может иметь следующие команды
'ChangeColor' 'зеленый'
'FillStyle' 'люк'
«Размеры» 10 15
и т.д .....

Какая структура данных лучше всего подходит для хранения этой информации. Мне нужно иметь возможность легко извлекать эти команды из структуры данных, учитывая «форму» объекта. Был бы словарь правильным выбором, я никогда раньше этим не пользовался

Спасибо

Ответы [ 6 ]

3 голосов
/ 08 января 2010

Возможно, вам лучше создать свой собственный класс:

class Shape(object):
    def __init__(self):
        self.shape = "rectangle"
        self.color = "green"
        self.fillstyle = "hatch"
        # etc

    def ChangeColor(self, color):
        self.color = color

    # etc
2 голосов
/ 08 января 2010

dicts для случаев, когда порядок не важен, но вы хотите сохранить значения для разных имен.

lists - это упорядоченные последовательности объектов, обычно одного типа, и позиция ничего особенного не означает.

tuples - упорядоченные последовательности объектов, возможно, разных типов, и каждая отдельная позиция имеет определенное значение.

1 голос
/ 08 января 2010

Я бы предложил использовать класс объекта и сохранить все значения / команды в этом объекте, чтобы вы могли легко передавать его. (Подобно тому, что рекурсивно сказал).

Тем не менее, Вы также можете использовать словарь, ключом которого является имя объекта, а значениями - список, содержащий возможные команды.

0 голосов
/ 08 января 2010

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

class Shape(object):
    def background(self, color):
        print "background:", color
    def foreground(self, color):
        print "foreground:", color
    def rect(self, left, top, right, bottom):
        print "rect:", left, top, right, bottom
    def execute_commands(self, command_list):
        for command in command_list:
            if hasattr(self, command[0]):
                getattr(self, command[0])(*command[1:])

>>> s = Shape()
>>> c = [('background', 'blue'), ('foreground', 'yellow'), ('rect', 10, 0, 20, 20)]
>>> s.execute_commands(c)
background: blue
foreground: yellow
rect: 10 0 20 20
0 голосов
/ 08 января 2010

Как насчет этого?

Пример

s = {'Rectangle':
        {'ChangeColor':'green','FillStyle':'hatch',
         'Dimension1': 10, 'Dimension2':15}}
s['Triangle'] = {'ChangeColor':'red','FillStyle':'hatch',
         'Dimension1': 10, 'Dimension2':15, 'Dimension3':5}

for k, v in s.iteritems():
    print k
    for k1, v1 in v.iteritems():
        print "   ", k1, "=", v1

Результат:

Triangle
    Dimension1 = 10
    Dimension2 = 15
    Dimension3 = 5
    ChangeColor = red
    FillStyle = hatch
Rectangle
    Dimension1 = 10
    Dimension2 = 15
    ChangeColor = green
    FillStyle = hatch
0 голосов
/ 08 января 2010

Мне кажется, что команда может быть представлена ​​в виде списка [] или кортежа (), как и последовательность команд. Таким образом, одна возможность состоит в том, что у вас есть список списков строк. Как правило, вы хотите использовать словарь только тогда, когда вы хотите найти значение по ключу. Например, если вы знали имя команды (по фигуре) и хотели знать, какие параметры были переданы этой команде, вы можете получить словарь, отображающий строку в список.

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

Вот ссылка на документацию Python по основным структурам данных, которая должна быть очень полезна: http://docs.python.org/tutorial/datastructures.html

Редактировать : в ответ на первый комментарий, вам нужно сохранять команды или просто читать их по одному и вводить их по одному?

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