繁体   English   中英

Python数据结构,字典?

[英]Python data structures, dictionary?

希望有人能帮忙。 我正在使用Python,并且希望能够执行以下操作。

我有一组对象(例如形状)和一系列对这些对象起作用的命令。 命令的格式为命令字符串,后跟可变数量的参数,可以是字符串或整数

例如,形状“矩形”可能具有以下命令
'ChangeColor''绿色'
'FillStyle''舱口盖'
'维度'10 15
等等.....

存储此信息的最佳数据结构是什么。 给定对象的“形状”,我​​需要能够轻松地从数据结构中检索这些命令。 词典是正确的选择吗,我以前从未使用过

谢谢

您最好创建自己的课程:

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

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

    # etc

dicts适用于顺序不重要但您希望存储其他名称的值的情况。

lists是对象的有序序列,通常是相同类型的,并且位置并不表示任何特殊含义。

tuples是对象的有序序列,可能是不同的类型,并且每个不同的位置都有特定的含义。

我建议使用一个对象类,并将所有值/命令存储在该对象内,以便您可以轻松地传递它。 (类似于递归的说法)。

然而; 您还可以使用字典,其键为对象名,值为包含可能命令的列表。

在我看来,命令可以表示为list []或tuple () ,一系列命令也可以表示为。 因此,一种可能性是您有一个字符串列表列表。 通常,仅当您想通过键查找值时才想使用字典。 例如,如果您知道命令的名称(输入形状)并想知道将哪些参数传递给该命令,则可以使用字典将字符串映射为列表。

如果您发布有关计划如何使用此数据的更多信息,我可以给出更好的答案。

以下是有关基本数据结构的Python文档的链接,该链接将非常有帮助: http : //docs.python.org/tutorial/datastructures.html

编辑 :响应第一条评论,您是否需要存储命令或只是从输入中逐个读取它们并执行它们?

那这个呢?

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

我会将命令存储为列表或元组的列表,具体取决于我是否认为自己会修改命令。 请注意,Python中的参数解压缩为执行这些命令提供了一种非常简单的机制,例如:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM