Skip to main content
 首页 » 编程设计

python之在python中寻找更好的数据结构

2025年05月04日11langtianya

我有一些要存储的基本数据,我正在寻找比我想出的更好的解决方案。 我有多个数据条目,每个条目有 4 个字段,name,url,currYear,availYears

我可以像这样用一个简单的数组来解决这个问题:

data = [ 
    ['test-name', ['http://example.com', '2015', '2015,2014']] 
    ['next-name', ['http://example.org', '1999', '1999']] 
] 

但是当尝试访问每个数组中的数据时,这会变得困惑。我最终得到了这样的 for 循环

for each in data: 
    name = each[0] 
    url = each[1][0] 
    currYear = each[1][1] 

我更喜欢做一些类似于字典的事情,我可以在其中通过键名引用我想要的内容。这不是有效的语法,但希望它能说明问题。

data = {'entry1': {'name': 'test-name'}, {'url': 'http://example.com'}, {'currYear': '2015'}, {'availYears': '2015,2014'}} 

然后我可以提取 entryX 的 url 数据。

编辑: 几个很好的回应。我决定继续创建一个类,因为 1) 它满足我的需要 2) 通过分离功能帮助清理代码,以及 3) 了解包、模块和类与 Java(我更熟悉)相比如何工作。 除了创建类之外,我还创建了 getter 和 setter。

class SchoolSiteData(object): 
    def __init__(self, name, url, currYear, availYears): 
        self.name = name 
        self.url = url 
        self.currYear = currYear 
        self.availYears = availYears 
 
    def getName(self): 
        return self.name 
    def getURL(self): 
        return self.url 
    def getCurrYear(self): 
        return self.currYear 
    def getAvailYears(self): 
        return self.availYears 
 
    def setName(self, name): 
        self.name = name 
    def setURL(self, url): 
        self.url = url 
    def setCurrYear(self, currYear): 
        self.currYear = currYear 
    def setAvailYears(self, availYears): 
        self.availYears = availYears 

请您参考如下方法:

类可以使它更易于使用:例如:

    class Entry(object): 
        def __init__(self, name, url, currYear, availYears): 
            self.name = name 
            self.url = url 
            self.currYear = currYear 
            self.availYears = availYears 
 
    entry1 = Entry('test-name', 'http://example.com', '2015', '2015,2014') 
    entry2 = Entry('next-name', 'http://example.org', '1999', '1999') 
 
    data = [entry1, entry2] 
 
    for entry in data: 
        print entry.name 
        print entry.url  
        print entry.currYear  
        print entry.availYears 
        print