我有五个变量,根据它们是否在阿拉斯加/美国和半/全分辨率,它们的值不同

2024-06-16 09:01:56 发布

您现在位置:Python中文网/ 问答频道 /正文

关于适当数据结构的问题:

我有五个变量,它们有不同的值 string根据他们是否在美国/阿拉斯加和 以半/全分辨率

所以我正在构建一个5/2/2(数组、列表或dict)

我想用x = DStr(var,'AK','H')访问它,例如。。 对于阿拉斯加/half res,OSP/UL/LR/etc的变量值是多少

这是一个静态表,值不会更改。 没有明显的顺序要求指数为0,1,2

问题是,数组不喜欢字符串索引和 迪克特只想要一把钥匙,不是三把

有什么想法吗


Tags: 数据结构列表stringvaretc分辨率res数组
3条回答

记住你的问题相当不清楚。我真的不明白您想要建模的数据的含义,我也不知道如何使用它

也就是说,类是定义自己的数据结构的好方法。在这种情况下,我猜您有OSP、UL、LR和“等”。因此,我将为此定义一个类:

class MyData:
    def __init__(self, osp, ul, lr, etc):
        self.osp = osp
        self.ul = ul
        self.lr = lr
        self.etc = etc

然后创建包含类实例的查找表:

table = {
    'AK': {'H': MyData(1,5,20,'something'),
           'F': MyData(3,2,28,'spam') },
    'FL': {'H': MyData(42,5,20,'eggs'),
           'F': MyData(2,13,7,'ham') },
    }

然后我可以定义一个函数来匹配您在问题中显示的签名。我忽略了参数var,因为你的问题没有告诉我任何有关它的信息

def DStr(var, state, resolution):
    return table[state][resolution]

可以使用元组为dict编制索引:

>>> values = {
...     ("AK", "H"): ("some", "sample", "data", "to", "return"),
...     ("AK", "F"): ("more", "sample", "data", "for", "you"),
...     # More data here
... }
>>> a, b, c, d, e = values[("AK", "H")]
>>> a
"some"

或者,您可以使用一套字典:

>>> values = {
...     "AK": {
...         "H": ("some", "sample", "data", "to", "return"),
...         "F": ("more", "sample", "data", "for", "you")
...     },
...     # Other nested dicts here
... }
>>> a, b, c, d, e = values["AK"]["H"]
>>> a
"some"

如果您有一个类结构,可以将5个数据点定义为单个对象的一部分(如果数据相关,最好将数据分组在一起),则可以存储类的实例,而不是元组:

>>> values = {
...     ("AK", "H"): MyClass("some", "sample", "data", "to", "return"),
...     ("AK", "F"): MyClass("more", "sample", "data", "for", "you"),
...     # More data here
... }
>>> obj = values[("AK", "H")]
>>> obj.osp
"some"

>>> values = {
...     "AK": {
...         "H": MyClass("some", "sample", "data", "to", "return"),
...         "F": MyClass("more", "sample", "data", "for", "you")
...     },
...     # Other nested dicts here
... }
>>> obj = values["AK"]["H"]
>>> obj.osp
"some"

如果有固定长度的两个字符串组成查找,则可以将它们连接在一起。可能比拥有价值观更简单。值可以在列表中

table = {'AKH': [1,"two",3.14],
        'AKF': [2,"four", 6.28]
        }
state = 'AK'
res   = 'F'
table[state+res]

输出

[2, 'four', 6.28]

相关问题 更多 >